diff options
author | 2021-04-19 00:00:52 -0700 | |
---|---|---|
committer | 2021-04-19 00:00:52 -0700 | |
commit | fc4a9e24dd23b520b9a5560215dea434ea2e03ea (patch) | |
tree | 8baba14d03013fa3155ba5a93d8b1c92d868e92d /pydis_site | |
parent | Update tests to use trailing slashes on valid urls (diff) | |
parent | Merge pull request #472 from python-discord/ks123/ghcr-token-to-github (diff) |
Merge branch 'main' into doc-validator
Diffstat (limited to 'pydis_site')
-rw-r--r-- | pydis_site/apps/api/models/bot/metricity.py | 41 | ||||
-rw-r--r-- | pydis_site/apps/api/tests/test_users.py | 39 | ||||
-rw-r--r-- | pydis_site/apps/api/viewsets/bot/user.py | 31 | ||||
-rw-r--r-- | pydis_site/static/css/home/index.css | 14 | ||||
-rw-r--r-- | pydis_site/static/images/sponsors/streamyard.png | bin | 0 -> 86678 bytes | |||
-rw-r--r-- | pydis_site/templates/home/index.html | 15 | ||||
-rw-r--r-- | pydis_site/templates/home/timeline.html | 949 |
7 files changed, 688 insertions, 401 deletions
diff --git a/pydis_site/apps/api/models/bot/metricity.py b/pydis_site/apps/api/models/bot/metricity.py index cae630f1..5daa5c66 100644 --- a/pydis_site/apps/api/models/bot/metricity.py +++ b/pydis_site/apps/api/models/bot/metricity.py @@ -1,3 +1,5 @@ +from typing import List, Tuple + from django.db import connections BLOCK_INTERVAL = 10 * 60 # 10 minute blocks @@ -89,3 +91,42 @@ class Metricity: raise NotFound() return values[0] + + def top_channel_activity(self, user_id: str) -> List[Tuple[str, int]]: + """ + Query the top three channels in which the user is most active. + + Help channels are grouped under "the help channels", + and off-topic channels are grouped under "off-topic". + """ + self.cursor.execute( + """ + SELECT + CASE + WHEN channels.name ILIKE 'help-%%' THEN 'the help channels' + WHEN channels.name ILIKE 'ot%%' THEN 'off-topic' + WHEN channels.name ILIKE '%%voice%%' THEN 'voice chats' + ELSE channels.name + END, + COUNT(1) + FROM + messages + LEFT JOIN channels ON channels.id = messages.channel_id + WHERE + author_id = '%s' AND NOT messages.is_deleted + GROUP BY + 1 + ORDER BY + 2 DESC + LIMIT + 3; + """, + [user_id] + ) + + values = self.cursor.fetchall() + + if not values: + raise NotFound() + + return values diff --git a/pydis_site/apps/api/tests/test_users.py b/pydis_site/apps/api/tests/test_users.py index 69bbfefc..c43b916a 100644 --- a/pydis_site/apps/api/tests/test_users.py +++ b/pydis_site/apps/api/tests/test_users.py @@ -410,7 +410,7 @@ class UserMetricityTests(APISubdomainTestCase): joined_at = "foo" total_messages = 1 total_blocks = 1 - self.mock_metricity_user(joined_at, total_messages, total_blocks) + self.mock_metricity_user(joined_at, total_messages, total_blocks, []) # When url = reverse('bot:user-metricity-data', args=[0], host='api') @@ -436,13 +436,24 @@ class UserMetricityTests(APISubdomainTestCase): # Then self.assertEqual(response.status_code, 404) + def test_no_metricity_user_for_review(self): + # Given + self.mock_no_metricity_user() + + # When + url = reverse('bot:user-metricity-review-data', args=[0], host='api') + response = self.client.get(url) + + # Then + self.assertEqual(response.status_code, 404) + def test_metricity_voice_banned(self): cases = [ {'exception': None, 'voice_banned': True}, {'exception': ObjectDoesNotExist, 'voice_banned': False}, ] - self.mock_metricity_user("foo", 1, 1) + self.mock_metricity_user("foo", 1, 1, [["bar", 1]]) for case in cases: with self.subTest(exception=case['exception'], voice_banned=case['voice_banned']): @@ -455,7 +466,27 @@ class UserMetricityTests(APISubdomainTestCase): self.assertEqual(response.status_code, 200) self.assertEqual(response.json()["voice_banned"], case["voice_banned"]) - def mock_metricity_user(self, joined_at, total_messages, total_blocks): + def test_metricity_review_data(self): + # Given + joined_at = "foo" + total_messages = 10 + total_blocks = 1 + channel_activity = [["bar", 4], ["buzz", 6]] + self.mock_metricity_user(joined_at, total_messages, total_blocks, channel_activity) + + # When + url = reverse('bot:user-metricity-review-data', args=[0], host='api') + response = self.client.get(url) + + # Then + self.assertEqual(response.status_code, 200) + self.assertEqual(response.json(), { + "joined_at": joined_at, + "top_channel_activity": channel_activity, + "total_messages": total_messages + }) + + def mock_metricity_user(self, joined_at, total_messages, total_blocks, top_channel_activity): patcher = patch("pydis_site.apps.api.viewsets.bot.user.Metricity") self.metricity = patcher.start() self.addCleanup(patcher.stop) @@ -463,6 +494,7 @@ class UserMetricityTests(APISubdomainTestCase): self.metricity.user.return_value = dict(joined_at=joined_at) self.metricity.total_messages.return_value = total_messages self.metricity.total_message_blocks.return_value = total_blocks + self.metricity.top_channel_activity.return_value = top_channel_activity def mock_no_metricity_user(self): patcher = patch("pydis_site.apps.api.viewsets.bot.user.Metricity") @@ -472,3 +504,4 @@ class UserMetricityTests(APISubdomainTestCase): self.metricity.user.side_effect = NotFound() self.metricity.total_messages.side_effect = NotFound() self.metricity.total_message_blocks.side_effect = NotFound() + self.metricity.top_channel_activity.side_effect = NotFound() diff --git a/pydis_site/apps/api/viewsets/bot/user.py b/pydis_site/apps/api/viewsets/bot/user.py index 829e2694..25722f5a 100644 --- a/pydis_site/apps/api/viewsets/bot/user.py +++ b/pydis_site/apps/api/viewsets/bot/user.py @@ -119,6 +119,22 @@ class UserViewSet(ModelViewSet): - 200: returned on success - 404: if a user with the given `snowflake` could not be found + ### GET /bot/users/<snowflake:int>/metricity_review_data + Gets metricity data for a single user's review by ID. + + #### Response format + >>> { + ... 'joined_at': '2020-08-26T08:09:43.507000', + ... 'top_channel_activity': [['off-topic', 15], + ... ['talent-pool', 4], + ... ['defcon', 2]], + ... 'total_messages': 22 + ... } + + #### Status codes + - 200: returned on success + - 404: if a user with the given `snowflake` could not be found + ### POST /bot/users Adds a single or multiple new users. The roles attached to the user(s) must be roles known by the site. @@ -262,3 +278,18 @@ class UserViewSet(ModelViewSet): except NotFound: return Response(dict(detail="User not found in metricity"), status=status.HTTP_404_NOT_FOUND) + + @action(detail=True) + def metricity_review_data(self, request: Request, pk: str = None) -> Response: + """Request handler for metricity_review_data endpoint.""" + user = self.get_object() + + with Metricity() as metricity: + try: + data = metricity.user(user.id) + data["total_messages"] = metricity.total_messages(user.id) + data["top_channel_activity"] = metricity.top_channel_activity(user.id) + return Response(data, status=status.HTTP_200_OK) + except NotFound: + return Response(dict(detail="User not found in metricity"), + status=status.HTTP_404_NOT_FOUND) diff --git a/pydis_site/static/css/home/index.css b/pydis_site/static/css/home/index.css index 58ca8888..ee6f6e4c 100644 --- a/pydis_site/static/css/home/index.css +++ b/pydis_site/static/css/home/index.css @@ -45,6 +45,10 @@ h1 { box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); } +#wave-hero-centered { + margin: auto auto; +} + #wave-hero-right img{ border-radius: 10px; box-shadow: 0 1px 6px rgba(0,0,0,0.16), 0 1px 6px rgba(0,0,0,0.23); @@ -206,9 +210,17 @@ h1 { #sponsors .hero-body { padding-top: 2rem; padding-bottom: 3rem; + + text-align: center; +} + +#sponsors .columns { + justify-content: center; + margin: auto; + max-width: 80%; } #sponsors img { height: 5rem; - margin-right: 2rem; + margin: auto 1rem; } diff --git a/pydis_site/static/images/sponsors/streamyard.png b/pydis_site/static/images/sponsors/streamyard.png Binary files differnew file mode 100644 index 00000000..a1527e8d --- /dev/null +++ b/pydis_site/static/images/sponsors/streamyard.png diff --git a/pydis_site/templates/home/index.html b/pydis_site/templates/home/index.html index 04815b7f..67f29e41 100644 --- a/pydis_site/templates/home/index.html +++ b/pydis_site/templates/home/index.html @@ -29,7 +29,7 @@ <div class="columns is-variable is-8"> {# Embedded Welcome video #} - <div id="wave-hero-left" class="column is-half"> + <div id="wave-hero-centered" class="column is-half"> <div class="force-aspect-container"> <iframe class="force-aspect-content" @@ -50,12 +50,6 @@ ></iframe> </div> </div> - - {# Right side content #} - <div id="wave-hero-right" class="column is-half"> - <img src="{% static "images/events/100k.png" %}" alt="100K members!"> - </div> - </div> </div> @@ -98,7 +92,7 @@ <section id="showcase" class="column is-half-desktop has-text-centered"> <article class="box"> - <header class="title">New Timeline!</header> + <header class="title">Interactive timeline</header> <div class="mini-timeline"> <i class="fa fa-asterisk"></i> @@ -110,7 +104,7 @@ </div> <p class="subtitle"> - Start from our humble beginnings to discover the events that made our community what it is today. + Discover the history of our community, and learn about the events that made our community what it is today. </p> <div class="buttons are-large is-centered"> @@ -204,6 +198,9 @@ <a href="https://notion.so" class="column is-narrow"> <img src="{% static "images/sponsors/notion.png" %}" alt="Notion"/> </a> + <a href="https://streamyard.com" class="column is-narrow"> + <img src="{% static "images/sponsors/streamyard.png" %}" alt="StreamYard"/> + </a> </div> </div> </div> diff --git a/pydis_site/templates/home/timeline.html b/pydis_site/templates/home/timeline.html index ece2e4e5..d9069aca 100644 --- a/pydis_site/templates/home/timeline.html +++ b/pydis_site/templates/home/timeline.html @@ -3,53 +3,53 @@ {% block title %}Timeline{% endblock %} {% block head %} -<link rel="stylesheet" href="{% static "css/home/timeline.css" %}"> -<link rel="stylesheet" href="{% static "css/home/index.css" %}"> + <link rel="stylesheet" href="{% static "css/home/timeline.css" %}"> + <link rel="stylesheet" href="{% static "css/home/index.css" %}"> {% endblock %} {% block content %} -{% include "base/navbar.html" %} + {% include "base/navbar.html" %} -<section class="cd-timeline js-cd-timeline"> + <section class="cd-timeline js-cd-timeline"> <div class="container max-width-lg cd-timeline__container"> - <div class="cd-timeline__block"> - <div class="cd-timeline__img cd-timeline__img--picture"> - <img src="{% static "images/timeline/cd-icon-picture.svg" %}" alt="Picture"> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img cd-timeline__img--picture"> + <img src="{% static "images/timeline/cd-icon-picture.svg" %}" alt="Picture"> + </div> - <div class="cd-timeline__content text-component"> - <h2>Python Discord is created</h2> - <p class="color-contrast-medium"><strong>joe</strong> becomes one of the owners around 3 days after it - is created, and <strong>lemon</strong> joins the owner team later in the year, when the community - has around 300 members.</p> + <div class="cd-timeline__content text-component"> + <h2>Python Discord is created</h2> + <p class="color-contrast-medium"><strong>Joe Banks</strong> becomes one of the owners around 3 days after it + is created, and <strong>Leon Sandøy</strong> (lemon) joins the owner team later in the year, when the community + has around 300 members.</p> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Jan 8th, 2017</span> - </div> - </div> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Jan 8th, 2017</span> + </div> </div> + </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture"> - <i class="fa fa-users"></i> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture"> + <i class="fa fa-users"></i> + </div> - <div class="cd-timeline__content text-component"> - <h2>Python Discord hits 1,000 members</h2> - <p class="color-contrast-medium">Our main source of new users at this point is a post on Reddit that - happens to get very good SEO. We are one of the top 10 search engine hits for the search term - "python discord".</p> + <div class="cd-timeline__content text-component"> + <h2>Python Discord hits 1,000 members</h2> + <p class="color-contrast-medium">Our main source of new users at this point is a post on Reddit that + happens to get very good SEO. We are one of the top 10 search engine hits for the search term + "python discord".</p> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Nov 10th, 2017</span> - </div> - </div> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Nov 10th, 2017</span> + </div> </div> + </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img cd-timeline__img--picture"> - <img src={% static "images/timeline/cd-icon-picture.svg" %} alt="Picture"> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img cd-timeline__img--picture"> + <img src={% static "images/timeline/cd-icon-picture.svg" %} alt="Picture"> + </div> <div class="cd-timeline__content text-component"> <h2>Our logo is born. Thanks @Aperture!</h2> @@ -57,464 +57,637 @@ src="https://raw.githubusercontent.com/python-discord/branding/main/logos/logo_banner/logo_site_banner.svg"> </p> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Feb 3rd, 2018</span> - </div> - </div> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Feb 3rd, 2018</span> + </div> </div> + </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture"> - <i class="fa fa-users"></i> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture"> + <i class="fa fa-users"></i> + </div> - <div class="cd-timeline__content text-component"> - <h2>PyDis hits 2,000 members; pythondiscord.com and @Python are live</h2> - <p class="color-contrast-medium">The public moderation bot we're using at the time, Rowboat, announces - it will be shutting down. We decide that we'll write our own bot to handle moderation, so that we - can have more control over its features. We also buy a domain and start making a website in Flask. - </p> + <div class="cd-timeline__content text-component"> + <h2>PyDis hits 2,000 members; pythondiscord.com and @Python are live</h2> + <p class="color-contrast-medium">The public moderation bot we're using at the time, Rowboat, announces + it will be shutting down. We decide that we'll write our own bot to handle moderation, so that we + can have more control over its features. We also buy a domain and start making a website in Flask. + </p> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Mar 4th, 2018</span> - </div> - </div> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Mar 4th, 2018</span> + </div> </div> + </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-blue cd-timeline__img--picture"> - <i class="fa fa-dice"></i> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-blue cd-timeline__img--picture"> + <i class="fa fa-dice"></i> + </div> - <div class="cd-timeline__content text-component"> - <h2>First code jam with the theme “snakes”</h2> - <p class="color-contrast-medium">Our very first Code Jam attracts a handful of users who work in random - teams of 2. We ask our participants to write a snake-themed Discord bot. Most of the code written - for this jam still lives on in SeasonalBot, and you can play with it by using the - <code>.snakes</code> command. For more information on this event, see <a - href="https://pythondiscord.com/pages/code-jams/code-jam-1-snakes-bot/">the event page</a></p> + <div class="cd-timeline__content text-component"> + <h2>First code jam with the theme “snakes”</h2> + <p class="color-contrast-medium">Our very first Code Jam attracts a handful of users who work in random + teams of 2. We ask our participants to write a snake-themed Discord bot. Most of the code written + for this jam still lives on in Sir Lancebot, and you can play with it by using the + <code>.snakes</code> command. For more information on this event, see <a + href="https://pythondiscord.com/pages/code-jams/code-jam-1-snakes-bot/">the event page</a></p> + + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Mar 23rd, 2018</span> + </div> + </div> + </div> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Mar 23rd, 2018</span> - </div> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-lime cd-timeline__img--picture"> + <i class="fa fa-scroll"></i> </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-lime cd-timeline__img--picture"> - <i class="fa fa-scroll"></i> - </div> + <div class="cd-timeline__content text-component"> + <h2>The privacy policy is created</h2> + <p class="color-contrast-medium">Since data privacy is quite important to us, we create a privacy page + pretty much as soon as our new bot and site starts collecting some data. To this day, we keep <a + href="https://pythondiscord.com/pages/privacy/">our privacy policy</a> up to date with all + changes, and since April 2020 we've started doing <a + href="https://pythondiscord.com/pages/data-reviews/">monthly data reviews</a>.</p> + + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">May 21st, 2018</span> + </div> + </div> + </div> - <div class="cd-timeline__content text-component"> - <h2>The privacy policy is created</h2> - <p class="color-contrast-medium">Since data privacy is quite important to us, we create a privacy page - pretty much as soon as our new bot and site starts collecting some data. To this day, we keep <a - href="https://pythondiscord.com/pages/privacy/">our privacy policy</a> up to date with all - changes, and since April 2020 we've started doing <a - href="https://pythondiscord.com/pages/data-reviews/">monthly data reviews</a>.</p> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-pink cd-timeline__img--picture"> + <i class="fa fa-handshake"></i> + </div> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">May 21st, 2018</span> - </div> - </div> + <div class="cd-timeline__content text-component"> + <h2>Do You Even Python and PyDis merger</h2> + <p class="color-contrast-medium">At this point in time, there are only two serious Python communities on + Discord - Ours, and one called Do You Even Python. We approach the owners of DYEP with a bold + proposal - let's shut down their community, replace it with links to ours, and in return we will let + their staff join our staff. This gives us a big boost in members, and eventually leads to @eivl and + @Mr. Hemlock joining our Admin team</p> + + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Jun 9th, 2018</span> + </div> </div> + </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-pink cd-timeline__img--picture"> - <i class="fa fa-handshake"></i> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture"> + <i class="fa fa-users"></i> + </div> - <div class="cd-timeline__content text-component"> - <h2>Do You Even Python and PyDis merger</h2> - <p class="color-contrast-medium">At this point in time, there are only two serious Python communities on - Discord - Ours, and one called Do You Even Python. We approach the owners of DYEP with a bold - proposal - let's shut down their community, replace it with links to ours, and in return we will let - their staff join our staff. This gives us a big boost in members, and eventually leads to @eivl and - @Mr. Hemlock joining our Admin team</p> + <div class="cd-timeline__content text-component"> + <h2>PyDis hits 5,000 members and partners with r/Python</h2> + <p class="color-contrast-medium">As we continue to grow, we approach the r/Python subreddit and ask to + become their official Discord community. They agree, and we become listed in their sidebar, giving + us yet another source of new members.</p> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Jun 9th, 2018</span> - </div> - </div> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Jun 20th, 2018</span> + </div> </div> + </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture"> - <i class="fa fa-users"></i> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-pink cd-timeline__img--picture"> + <i class="fa fa-handshake"></i> + </div> - <div class="cd-timeline__content text-component"> - <h2>PyDis hits 5,000 members and partners with r/Python</h2> - <p class="color-contrast-medium">As we continue to grow, we approach the r/Python subreddit and ask to - become their official Discord community. They agree, and we become listed in their sidebar, giving - us yet another source of new members.</p> + <div class="cd-timeline__content text-component"> + <h2>PyDis is now partnered with Discord; the vanity URL discord.gg/python is created</h2> + <p class="color-contrast-medium">After being rejected for their Partner program several times, we + finally get approved. The recent partnership with the r/Python subreddit plays a significant role in + qualifying us for this partnership.</p> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Jun 20th, 2018</span> - </div> - </div> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Jul 10th, 2018</span> + </div> </div> + </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-pink cd-timeline__img--picture"> - <i class="fa fa-handshake"></i> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-blue cd-timeline__img--picture"> + <i class="fa fa-dice"></i> + </div> - <div class="cd-timeline__content text-component"> - <h2>PyDis is now partnered with Discord; the vanity URL discord.gg/python is created</h2> - <p class="color-contrast-medium">After being rejected for their Partner program several times, we - finally get approved. The recent partnership with the r/Python subreddit plays a significant role in - qualifying us for this partnership.</p> + <div class="cd-timeline__content text-component"> + <h2>First Hacktoberfest PyDis event; @Sir Lancebot is created</h2> + <p class="color-contrast-medium">We create a second bot for our community and fill it up with simple, + fun and relatively easy issues. The idea is to create an approachable arena for our members to cut + their open-source teeth on, and to provide lots of help and hand-holding for those who get stuck. + We're training our members to be productive contributors in the open-source ecosystem.</p> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Jul 10th, 2018</span> - </div> - </div> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Oct 1st, 2018</span> + </div> </div> + </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-blue cd-timeline__img--picture"> - <i class="fa fa-dice"></i> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture"> + <i class="fa fa-users"></i> + </div> - <div class="cd-timeline__content text-component"> - <h2>First Hacktoberfest PyDis event; @SeasonalBot is created</h2> - <p class="color-contrast-medium">We create a second bot for our community and fill it up with simple, - fun and relatively easy issues. The idea is to create an approachable arena for our members to cut - their open-source teeth on, and to provide lots of help and hand-holding for those who get stuck. - We're training our members to be productive contributors in the open-source ecosystem.</p> + <div class="cd-timeline__content text-component"> + <h2>PyDis hits 10,000 members</h2> + <p class="color-contrast-medium">We partner with RLBot, move from GitLab to GitHub, and start putting + together the first Advent of Code event.</p> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Oct 1st, 2018</span> - </div> - </div> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Nov 24th, 2018</span> + </div> </div> + </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture"> - <i class="fa fa-users"></i> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-orange cd-timeline__img--picture"> + <i class="fa fa-code"></i> + </div> - <div class="cd-timeline__content text-component"> - <h2>PyDis hits 10,000 members</h2> - <p class="color-contrast-medium">We partner with RLBot, move from GitLab to GitHub, and start putting - together the first Advent of Code event.</p> + <div class="cd-timeline__content text-component"> + <h2>django-simple-bulma is released on PyPi</h2> + <p class="color-contrast-medium">Our very first package on PyPI, <a + href="https://pypi.org/project/django-simple-bulma/">django-simple-bulma</a> is a package that + sets up the Bulma CSS framework for your Django application and lets you configure everything in + settings.py.</p> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Nov 24th, 2018</span> - </div> - </div> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Dec 19th, 2018</span> + </div> </div> + </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-orange cd-timeline__img--picture"> - <i class="fa fa-code"></i> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture"> + <i class="fa fa-users"></i> + </div> - <div class="cd-timeline__content text-component"> - <h2>django-simple-bulma is released on PyPi</h2> - <p class="color-contrast-medium">Our very first package on PyPI, <a - href="https://pypi.org/project/django-simple-bulma/">django-simple-bulma</a> is a package that - sets up the Bulma CSS framework for your Django application and lets you configure everything in - settings.py.</p> + <div class="cd-timeline__content text-component"> + <h2>PyDis hits 15,000 members; the “hot ones special” video is released</h2> + <div class="force-aspect-container"> + <iframe class="force-aspect-content" src="https://www.youtube.com/embed/DIBXg8Qh7bA" frameborder="0" + allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" + allowfullscreen></iframe> + </div> + + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Apr 8th, 2019</span> + </div> + </div> + </div> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Dec 19th, 2018</span> - </div> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-orange cd-timeline__img--picture"> + <i class="fa fa-code"></i> </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture"> - <i class="fa fa-users"></i> - </div> + <div class="cd-timeline__content text-component"> + <h2>The Django rewrite of pythondiscord.com is now live!</h2> + <p class="color-contrast-medium">The site is getting more and more complex, and it's time for a rewrite. + We decide to go for a different stack, and build a website based on Django, DRF, Bulma and + PostgreSQL.</p> - <div class="cd-timeline__content text-component"> - <h2>PyDis hits 15,000 members; the “hot ones special” video is released</h2> - <div class="force-aspect-container"> - <iframe class="force-aspect-content" src="https://www.youtube.com/embed/DIBXg8Qh7bA" frameborder="0" - allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" - allowfullscreen></iframe> - </div> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Sep 15, 2019</span> + </div> + </div> + </div> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Apr 8th, 2019</span> - </div> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-lime cd-timeline__img--picture"> + <i class="fa fa-scroll"></i> </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-orange cd-timeline__img--picture"> - <i class="fa fa-code"></i> - </div> + <div class="cd-timeline__content text-component"> + <h2>The code of conduct is created</h2> + <p class="color-contrast-medium">Inspired by the Adafruit, Rust and Django communities, an essential + community pillar is created; Our <a href="https://pythondiscord.com/pages/code-of-conduct/">Code of + Conduct.</a></p> - <div class="cd-timeline__content text-component"> - <h2>The Django rewrite of pythondiscord.com is now live!</h2> - <p class="color-contrast-medium">The site is getting more and more complex, and it's time for a rewrite. - We decide to go for a different stack, and build a website based on Django, DRF, Bulma and - PostgreSQL.</p> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Oct 26th, 2019</span> + </div> + </div> + </div> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Sep 15, 2019</span> - </div> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img cd-timeline__img--picture"> + <img src={% static "images/timeline/cd-icon-picture.svg" %} alt="Picture"> </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-lime cd-timeline__img--picture"> - <i class="fa fa-scroll"></i> - </div> + <div class="cd-timeline__content text-component"> + <h2>Sebastiaan Zeef becomes an owner</h2> + <p class="color-contrast-medium">After being a long time active contributor to our projects and the driving + force behind many of our events, Sebastiaan Zeef joins the Owners Team alongside Joe & Leon.</p> - <div class="cd-timeline__content text-component"> - <h2>The code of conduct is created</h2> - <p class="color-contrast-medium">Inspired by the Adafruit, Rust and Django communities, an essential - community pillar is created; Our <a href="https://pythondiscord.com/pages/code-of-conduct/">Code of - Conduct.</a></p> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Sept 22nd, 2019</span> + </div> + </div> + </div> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Oct 26th, 2019</span> - </div> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture"> + <i class="fa fa-users"></i> </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img cd-timeline__img--picture"> - <img src={% static "images/timeline/cd-icon-picture.svg" %} alt="Picture"> - </div> + <div class="cd-timeline__content text-component"> + <h2>PyDis hits 30,000 members</h2> + <p class="color-contrast-medium">More than tripling in size since the year before, the community hits + 30000 users. At this point, we're probably the largest Python chat community on the planet.</p> - <div class="cd-timeline__content text-component"> - <h2>Ves Zappa becomes an owner</h2> - <p class="color-contrast-medium">After being a long time active contributor to our projects and the driving force behind our events, Ves Zappa joined the Owners team alongside joe & lemon.</p> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Dec 22nd, 2019</span> + </div> + </div> + </div> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Sept 22nd, 2019</span> - </div> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-blue cd-timeline__img--picture"> + <i class="fa fa-dice"></i> </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture"> - <i class="fa fa-users"></i> - </div> + <div class="cd-timeline__content text-component"> + <h2>PyDis sixth code jam with the theme “Ancient technology” and the technology Kivy</h2> + <p class="color-contrast-medium">Our Code Jams are becoming an increasingly big deal, and the Kivy core + developers join us to judge the event and help out our members during the event. One of them, + @tshirtman, even joins our staff!</p> + + <div class="force-aspect-container"> + <iframe class="force-aspect-content" src="https://www.youtube.com/embed/8fbZsGrqBzo" frameborder="0" + allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" + allowfullscreen></iframe> + </div> + + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Jan 17, 2020</span> + </div> + </div> + </div> - <div class="cd-timeline__content text-component"> - <h2>PyDis hits 30,000 members</h2> - <p class="color-contrast-medium">More than tripling in size since the year before, the community hits - 30000 users. At this point, we're probably the largest Python chat community on the planet.</p> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-green cd-timeline__img--picture"> + <i class="fa fa-comments"></i> + </div> + + <div class="cd-timeline__content text-component"> + <h2>The new help channel system is live</h2> + <p class="color-contrast-medium">We release our dynamic help-channel system, which allows you to claim + your very own help channel instead of fighting over the static help channels. We release a <a + href="https://pythondiscord.com/pages/resources/guides/help-channels/">Help Channel Guide</a> to + help our members fully understand how the system works.</p> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Dec 22nd, 2019</span> - </div> - </div> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Apr 5th, 2020</span> + </div> </div> + </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-blue cd-timeline__img--picture"> - <i class="fa fa-dice"></i> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture"> + <i class="fa fa-users"></i> + </div> - <div class="cd-timeline__content text-component"> - <h2>PyDis sixth code jam with the theme “Ancient technology” and the technology Kivy</h2> - <p class="color-contrast-medium">Our Code Jams are becoming an increasingly big deal, and the Kivy core - developers join us to judge the event and help out our members during the event. One of them, - @tshirtman, even joins our staff!</p> + <div class="cd-timeline__content text-component"> + <h2>Python Discord hits 40,000 members, and is now bigger than Liechtenstein.</h2> + <p class="color-contrast-medium"><img + src="https://cdn.discordapp.com/attachments/354619224620138496/699666518476324954/unknown.png"> + </p> - <div class="force-aspect-container"> - <iframe class="force-aspect-content" src="https://www.youtube.com/embed/8fbZsGrqBzo" frameborder="0" - allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" - allowfullscreen></iframe> - </div> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Apr 14, 2020</span> + </div> + </div> + </div> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Jan 17, 2020</span> - </div> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-purple cd-timeline__img--picture"> + <i class="fa fa-gamepad"></i> </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-green cd-timeline__img--picture"> - <i class="fa fa-comments"></i> - </div> + <div class="cd-timeline__content text-component"> + <h2>PyDis Game Jam 2020 with the “Three of a Kind” theme and Arcade as the technology</h2> + <p class="color-contrast-medium">The creator of Arcade, Paul Vincent Craven, joins us as a judge. + Several of the Code Jam participants also end up getting involved contributing to the Arcade + repository.</p> + + <div class="force-aspect-container"> + <iframe class="force-aspect-content" src="https://www.youtube.com/embed/KkLXMvKfEgs" frameborder="0" + allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" + allowfullscreen></iframe> + </div> + + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Apr 17th, 2020</span> + </div> + </div> + </div> - <div class="cd-timeline__content text-component"> - <h2>The new help channel system is live</h2> - <p class="color-contrast-medium">We release our dynamic help-channel system, which allows you to claim - your very own help channel instead of fighting over the static help channels. We release a <a - href="https://pythondiscord.com/pages/resources/guides/help-channels/">Help Channel Guide</a> to - help our members fully understand how the system works.</p> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-green cd-timeline__img--picture"> + <i class="fa fa-comments"></i> + </div> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Apr 5th, 2020</span> - </div> - </div> + <div class="cd-timeline__content text-component"> + <h2>ModMail is now live</h2> + <p class="color-contrast-medium">Having originally planned to write our own ModMail bot from scratch, we + come across an exceptionally good <a href="https://github.com/kyb3r/modmail">ModMail bot by + kyb3r</a> and decide to just self-host that one instead.</p> + + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">May 25th, 2020</span> + </div> </div> + </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture"> - <i class="fa fa-users"></i> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-pink cd-timeline__img--picture"> + <i class="fa fa-handshake"></i> + </div> - <div class="cd-timeline__content text-component"> - <h2>Python Discord hits 40,000 members, and is now bigger than Liechtenstein.</h2> - <p class="color-contrast-medium"><img - src="https://cdn.discordapp.com/attachments/354619224620138496/699666518476324954/unknown.png"> - </p> + <div class="cd-timeline__content text-component"> + <h2>Python Discord is now listed on python.org/community</h2> + <p class="color-contrast-medium">After working towards this goal for months, we finally work out an + arrangement with the PSF that allows us to be listed on that most holiest of websites: + https://python.org/. <a href="https://youtu.be/yciX2meIkXI?t=3">There was much rejoicing.</a></p> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Apr 14, 2020</span> - </div> - </div> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">May 28th, 2020</span> + </div> </div> + </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-purple cd-timeline__img--picture"> - <i class="fa fa-gamepad"></i> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-red cd-timeline__img--picture"> + <i class="fa fa-chart-bar"></i> + </div> - <div class="cd-timeline__content text-component"> - <h2>PyDis Game Jam 2020 with the “Three of a Kind” theme and Arcade as the technology</h2> - <p class="color-contrast-medium">The creator of Arcade, Paul Vincent Craven, joins us as a judge. - Several of the Code Jam participants also end up getting involved contributing to the Arcade - repository.</p> + <div class="cd-timeline__content text-component"> + <h2>Python Discord Public Statistics are now live</h2> + <p class="color-contrast-medium">After getting numerous requests to publish beautiful data on member + count and channel use, we create <a href="https://stats.pythondiscord.com/">stats.pythondiscord.com</a> for + all to enjoy.</p> - <div class="force-aspect-container"> - <iframe class="force-aspect-content" src="https://www.youtube.com/embed/KkLXMvKfEgs" frameborder="0" - allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" - allowfullscreen></iframe> - </div> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Jun 4th, 2020</span> + </div> + </div> + </div> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Apr 17th, 2020</span> - </div> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-blue cd-timeline__img--picture"> + <i class="fa fa-dice"></i> </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-green cd-timeline__img--picture"> - <i class="fa fa-comments"></i> - </div> + <div class="cd-timeline__content text-component"> + <h2>PyDis summer code jam 2020 with the theme “Early Internet” and Django as the technology</h2> + <p class="color-contrast-medium">Sponsored by the Django Software Foundation and JetBrains, the Summer + Code Jam for 2020 attracts hundreds of participants, and sees the creation of some fantastic + projects. Check them out in our judge stream below:</p> + + <div class="force-aspect-container"> + <iframe class="force-aspect-content" src="https://www.youtube.com/embed/OFtm8f2iu6c" frameborder="0" + allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" + allowfullscreen></iframe> + </div> + + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Jul 31st, 2020</span> + </div> + </div> + </div> - <div class="cd-timeline__content text-component"> - <h2>ModMail is now live</h2> - <p class="color-contrast-medium">Having originally planned to write our own ModMail bot from scratch, we - come across an exceptionally good <a href="https://github.com/kyb3r/modmail">ModMail bot by - kyb3r</a> and decide to just self-host that one instead.</p> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-pink cd-timeline__img--picture"> + <i class="fa fa-handshake"></i> + </div> + + <div class="cd-timeline__content text-component"> + <h2>Python Discord is now the new home of the PyWeek event!</h2> + <p class="color-contrast-medium">PyWeek, a game jam that has been running since 2005, joins Python + Discord as one of our official events. Find more information about PyWeek on <a + href="https://pyweek.org/">their official website</a>.</p> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">May 25th, 2020</span> - </div> - </div> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Aug 16th, 2020</span> + </div> </div> + </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-pink cd-timeline__img--picture"> - <i class="fa fa-handshake"></i> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img cd-timeline__img--picture"> + <img src="{% static "images/timeline/cd-icon-picture.svg" %}" alt="Picture"> + </div> - <div class="cd-timeline__content text-component"> - <h2>Python Discord is now listed on python.org/community</h2> - <p class="color-contrast-medium">After working towards this goal for months, we finally work out an - arrangement with the PSF that allows us to be listed on that most holiest of websites: - https://python.org/. <a href="https://youtu.be/yciX2meIkXI?t=3">There was much rejoicing.</a></p> + <div class="cd-timeline__content text-component"> + <h2>Python Discord hosts the 2020 CPython Core Developer Q&A</h2> + <div class="force-aspect-container"> + <iframe class="force-aspect-content" src="https://www.youtube.com/embed/gXMdfBTcOfQ" frameborder="0" + allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" + allowfullscreen></iframe> + </div> + + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Oct 21st, 2020</span> + </div> + </div> + </div> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">May 28th, 2020</span> - </div> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture"> + <i class="fa fa-users"></i> </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-red cd-timeline__img--picture"> - <i class="fa fa-chart-bar"></i> - </div> + <div class="cd-timeline__content text-component"> + <h2>Python Discord hits 100,000 members!</h2> + <p class="color-contrast-medium">Only six months after hitting 40,000 users, we hit 100,000 users. A + monumental milestone, + and one we're very proud of. To commemorate it, we create this timeline.</p> - <div class="cd-timeline__content text-component"> - <h2>Python Discord Public Statistics are now live</h2> - <p class="color-contrast-medium">After getting numerous requests to publish beautiful data on member - count and channel use, we create <a href="https://stats.pythondiscord.com/">stats.pythondiscord.com</a> for all to enjoy.</p> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Oct 22nd, 2020</span> + </div> + </div> + </div> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Jun 4th, 2020</span> - </div> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-orange cd-timeline__img--picture"> + <i class="fa fa-wrench"></i> </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-blue cd-timeline__img--picture"> - <i class="fa fa-dice"></i> - </div> + <div class="cd-timeline__content text-component"> + <h2>We migrate all our infrastructure to Kubernetes</h2> + <p class="color-contrast-medium">As our tech stack grows, we decide to migrate all our services over to a + container orchestration paradigm via Kubernetes. This gives us better control and scalability. + <b>Joe Banks</b> takes on the role as DevOps Lead. + </p> - <div class="cd-timeline__content text-component"> - <h2>PyDis summer code jam 2020 with the theme “Early Internet” and Django as the technology</h2> - <p class="color-contrast-medium">Sponsored by the Django Software Foundation and JetBrains, the Summer - Code Jam for 2020 attracts hundreds of participants, and sees the creation of some fantastic - projects. Check them out in our judge stream below:</p> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Nov 29th, 2020</span> + </div> + </div> + </div> - <div class="force-aspect-container"> - <iframe class="force-aspect-content" src="https://www.youtube.com/embed/OFtm8f2iu6c" frameborder="0" - allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" - allowfullscreen></iframe> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-red cd-timeline__img--picture"> + <i class="fa fa-snowflake-o"></i> + </div> + + <div class="cd-timeline__content text-component"> + <h2>Advent of Code attracts hundreds of participants</h2> + <p class="color-contrast-medium"> + A total of 443 Python Discord members sign up to be part of + <a href="https://adventofcode.com/">Eric Wastl's excellent Advent of Code event</a>. + As always, we provide dedicated announcements, scoreboards, bot commands and channels for our members + to enjoy the event in. + + </p> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Jul 31st, 2020</span> - </div> - </div> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">December 1st - 25th, 2020</span> + </div> </div> + </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-pink cd-timeline__img--picture"> - <i class="fa fa-handshake"></i> - </div> - <div class="cd-timeline__content text-component"> - <h2>Python Discord is now the new home of the PyWeek event!</h2> - <p class="color-contrast-medium">PyWeek, a game jam that has been running since 2005, joins Python - Discord as one of our official events. Find more information about PyWeek on <a - href="https://pyweek.org/">their official website</a>.</p> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-blue cd-timeline__img--picture"> + <i class="fa fa-music"></i> + </div> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Aug 16th, 2020</span> - </div> - </div> + <div class="cd-timeline__content text-component"> + <h2>We release The PEP 8 song</h2> + <p class="color-contrast-medium">We release the PEP 8 song on our YouTube channel, which finds tens of + thousands of listeners!</p> + + <div class="force-aspect-container"> + <iframe class="force-aspect-content" src="https://www.youtube.com/embed/hgI0p1zf31k" frameborder="0" + allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" + allowfullscreen></iframe> + </div> + + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">February 8th, 2021</span> + </div> </div> + </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img cd-timeline__img--picture"> - <img src="{% static "images/timeline/cd-icon-picture.svg" %}" alt="Picture"> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture"> + <i class="fa fa-users"></i> + </div> - <div class="cd-timeline__content text-component"> - <h2>Python Discord hosts the 2020 CPython Core Developer Q&A</h2> - <div class="force-aspect-container"> - <iframe class="force-aspect-content" src="https://www.youtube.com/embed/gXMdfBTcOfQ" frameborder="0" - allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" - allowfullscreen></iframe> - </div> + <div class="cd-timeline__content text-component"> + <h2>We now have 150,000 members!</h2> + <p class="color-contrast-medium">Our growth continues to accelerate.</p> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Oct 21st, 2020</span> - </div> - </div> + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Feb 18th, 2021</span> + </div> </div> + </div> - <div class="cd-timeline__block"> - <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture"> - <i class="fa fa-users"></i> - </div> + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-green cd-timeline__img--picture"> + <i class="fa fa-microphone"></i> + </div> - <div class="cd-timeline__content text-component"> - <h2>Python Discord hits 100,000 members.</h2> - <p class="color-contrast-medium">After years of hard work, we hit 100,000 users. A monumental milestone, - and one we're very proud of. To commemorate it, we create this timeline.</p> + <div class="cd-timeline__content text-component"> + <h2>Leon Sandøy appears on Talk Python To Me</h2> + <p class="color-contrast-medium">Leon goes on the Talk Python to Me podcast with Michael Kennedy + to discuss the history of Python Discord, the critical importance of culture, and how to run a massive + community. You can find the episode <a href="https://talkpython.fm/episodes/show/305/python-community-at-python-discord"> at talkpython.fm</a>. + </p> + + <iframe width="100%" height="166" scrolling="no" frameborder="no" + src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/996083146&color=ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false"> + </iframe> + + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Mar 1st, 2021</span> + </div> + </div> + </div> + + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-pink cd-timeline__img--picture"> + <i class="fa fa-microphone"></i> + </div> - <div class="flex justify-between items-center"> - <span class="cd-timeline__date">Oct 22nd, 2020</span> - </div> - </div> + <div class="cd-timeline__content text-component"> + <h2>We're on the Teaching Python podcast!</h2> + <p class="color-contrast-medium">Leon joins Sean and Kelly on the Teaching Python podcast to discuss how the pandemic has + changed the way we learn, and what role communities like Python Discord can play in this new world. + You can find the episode <a href="https://teachingpython.fm/63"> at teachingpython.fm</a>. + </p> + + <iframe width="100%" height="166" frameborder="0" scrolling="no" + src="https://player.fireside.fm/v2/UIYXtbeL+qOjGAsKi?theme=dark" + ></iframe> + + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Mar 13th, 2021</span> + </div> + </div> + </div> + + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-purple cd-timeline__img--picture"> + <i class="fa fa-comment"></i> + </div> + + <div class="cd-timeline__content text-component"> + <h2>New feature: Weekly discussion channel</h2> + <p class="color-contrast-medium">Every week (or two weeks), we'll be posting a new topic to discuss in a + channel called <b>#weekly-topic-discussion</b>. Our inaugural topic is a PyCon talk by Anthony Shaw called + <b>Wily Python: Writing simpler and more maintainable Python.</b></a>. + </p> + + <div class="force-aspect-container"> + <iframe class="force-aspect-content" src="https://www.youtube.com/embed/dqdsNoApJ80" frameborder="0" + allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" + allowfullscreen></iframe> + </div> + + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Mar 13th, 2021</span> + </div> </div> + </div> + + <div class="cd-timeline__block"> + <div class="cd-timeline__img pastel-red cd-timeline__img--picture"> + <i class="fa fa-youtube-play"></i> + </div> + + <div class="cd-timeline__content text-component"> + <h2>Summer Code Jam 2020 Highlights</h2> + <p class="color-contrast-medium"> + We release a new video to our YouTube showing the best projects from the Summer Code Jam 2020. + Better late than never! + </p> + + <div class="force-aspect-container"> + <iframe class="force-aspect-content" src="https://www.youtube.com/embed/g9cnp4W0P54" frameborder="0" + allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" + allowfullscreen></iframe> + </div> + + <div class="flex justify-between items-center"> + <span class="cd-timeline__date">Mar 21st, 2021</span> + </div> + </div> + </div> + </div> -</section> + </section> -<script src="{% static "js/timeline/main.js" %}"></script> + <script src="{% static "js/timeline/main.js" %}"></script> {% endblock %} |