From 4eb440c7f501581c3ed2ecfa229fbb0c93d8c058 Mon Sep 17 00:00:00 2001 From: Zorex Salvo Date: Mon, 15 Sep 2025 09:58:49 +0800 Subject: [PATCH 1/5] Restructure landing page and remove sortable2 - Refactored landing page templates for better structure and maintainability. - Moved gallery and navbar into header includes. - Removed dependency on django-admin-sortable2: - Uninstalled package and removed from requirements.txt. - Removed from INSTALLED_APPS and admin usage. - Updated Dockerfile to use latest Python 3.8 and Node.js 22.x. - Improved Docker build reliability by updating apt install steps. --- Dockerfile | 15 ++- landing/admin.py | 3 +- landing/templates/landing/header.html | 28 +++++ .../landing/{ => header}/gallery1.html | 0 landing/templates/landing/header/navbar.html | 20 +++ landing/templates/landing/index.html | 117 +++--------------- pythonph/settings.py | 1 - requirements.txt | 1 - 8 files changed, 73 insertions(+), 112 deletions(-) create mode 100644 landing/templates/landing/header.html rename landing/templates/landing/{ => header}/gallery1.html (100%) create mode 100644 landing/templates/landing/header/navbar.html diff --git a/Dockerfile b/Dockerfile index 413a5f9..94f3258 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,14 +1,17 @@ -FROM python:3.8.1 +FROM python:3.8.18 -RUN apt-get -y update -RUN apt-get -y upgrade -RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - -RUN apt-get -y install nodejs -RUN apt-get -y install libcairo-dev +# Install dependencies for node +RUN apt-get update && \ + apt-get install -y curl ca-certificates && \ + curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \ + apt-get install -y nodejs && \ + node --version && npm --version +RUN apt-get -y install libcairo-dev RUN mkdir -p /usr/src/app COPY package.json /usr/src/app/ +RUN npm --version RUN npm install --prefix /usr/src/app/ COPY requirements.txt /usr/src/app diff --git a/landing/admin.py b/landing/admin.py index 7db14e9..006b70e 100644 --- a/landing/admin.py +++ b/landing/admin.py @@ -1,4 +1,3 @@ -from adminsortable2.admin import SortableAdminMixin from django.contrib import admin from django.utils.encoding import force_text @@ -42,7 +41,7 @@ def get_queryset(self, request): @admin.register(Section) -class SectionAdmin(SortableAdminMixin, admin.ModelAdmin): +class SectionAdmin(admin.ModelAdmin): search_fields = ('name',) list_filter = (IsArchivedListFilter,) diff --git a/landing/templates/landing/header.html b/landing/templates/landing/header.html new file mode 100644 index 0000000..58bb8ce --- /dev/null +++ b/landing/templates/landing/header.html @@ -0,0 +1,28 @@ +{% load static %} + +
+ + {% include "landing/header/navbar.html" %} +
+
+
+
+ +
+

+ Python + Philippines +

+
+

+ PythonPH is a non-stock, non-profit, volunteer-run + organization dedicated to support and facilitate the + growth of the community of Python programmers in the + Philippines. +

+
+ + {% include "landing/header/gallery1.html" %} +
+
+ diff --git a/landing/templates/landing/gallery1.html b/landing/templates/landing/header/gallery1.html similarity index 100% rename from landing/templates/landing/gallery1.html rename to landing/templates/landing/header/gallery1.html diff --git a/landing/templates/landing/header/navbar.html b/landing/templates/landing/header/navbar.html new file mode 100644 index 0000000..d82791f --- /dev/null +++ b/landing/templates/landing/header/navbar.html @@ -0,0 +1,20 @@ +{% load static %} + + diff --git a/landing/templates/landing/index.html b/landing/templates/landing/index.html index 2db8dcb..7f4c566 100644 --- a/landing/templates/landing/index.html +++ b/landing/templates/landing/index.html @@ -3,110 +3,23 @@ - - - - - Python Philippines - - - + + + + + Python Philippines + + + - - + + - - -
- -
-
-
-
- -
-

- Python - Philippines -

-
-

- PythonPH is a non-stock, non-profit, volunteer-run - organization dedicated to support and facilitate the - growth of the community of Python programmers in the - Philippines. -

- - -
- - {% include "landing/gallery1.html" %} -
-
+ + {% include "landing/header.html" %}
Date: Mon, 15 Sep 2025 10:39:33 +0800 Subject: [PATCH 2/5] Refactor: Improve why_python section readability Enhanced the "Why Python?" section for better clarity and readability. Updated the messaging to more effectively communicate the impact of Python and the community's mission. No structural changes made to the template. --- .pre-commit-config.yaml | 11 + landing/templates/landing/footer.html | 36 ++ .../templates/landing/header/gallery1.html | 2 +- .../{header.html => header/index.html} | 1 - landing/templates/landing/index.html | 600 +----------------- landing/templates/landing/old_index.html | 81 --- landing/templates/landing/our_aim.html | 56 ++ .../templates/landing/what_we_do/index.html | 155 +++++ landing/templates/landing/why_python.html | 27 + 9 files changed, 308 insertions(+), 661 deletions(-) create mode 100644 .pre-commit-config.yaml create mode 100644 landing/templates/landing/footer.html rename landing/templates/landing/{header.html => header/index.html} (99%) delete mode 100644 landing/templates/landing/old_index.html create mode 100644 landing/templates/landing/our_aim.html create mode 100644 landing/templates/landing/what_we_do/index.html create mode 100644 landing/templates/landing/why_python.html diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..78ec9b2 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,11 @@ +repos: + - repo: git@github.com:astral-sh/ruff-pre-commit + rev: v0.4.4 + hooks: + - id: ruff + + - repo: git@github.com:pre-commit/pre-commit-hooks + rev: v4.5.0 + hooks: + - id: end-of-file-fixer + - id: trailing-whitespace diff --git a/landing/templates/landing/footer.html b/landing/templates/landing/footer.html new file mode 100644 index 0000000..bec635e --- /dev/null +++ b/landing/templates/landing/footer.html @@ -0,0 +1,36 @@ +{% load static %} + + diff --git a/landing/templates/landing/header/gallery1.html b/landing/templates/landing/header/gallery1.html index 561acbe..f35fdd2 100644 --- a/landing/templates/landing/header/gallery1.html +++ b/landing/templates/landing/header/gallery1.html @@ -1,4 +1,4 @@ -{% load static from staticfiles %} +{% load static %}
    - diff --git a/landing/templates/landing/index.html b/landing/templates/landing/index.html index 7f4c566..9d2baf2 100644 --- a/landing/templates/landing/index.html +++ b/landing/templates/landing/index.html @@ -6,10 +6,7 @@ - + Python Philippines @@ -18,587 +15,34 @@ - - {% include "landing/header.html" %} + + + {% include "landing/header/index.html" %} - -
    -
    - -
    -
    -
    -

    - Our Aim -

    -
      -
    • - To show that Python has something for - everyone: from hobbyists, to educators, - to students, to professionals. -
    • -
    • - To inspire Filipinos to excel in their craft - through Python and Open Source. -
    • -
    • - To provide a safe space where the Python - programming language and surrounding - technologies can be explored, discussed and - exercised. -
    • -
    -
    + + {% include "landing/why_python.html" %} -

    - We believe that we create small dents of improvement - in the PH Tech industry when we foster environments - that inspire and motivate individuals to be technically competent - and passionate about their craft. -

    - - Get to know us - -
    -
    -
    -
    + + {% include "landing/what_we_do/index.html" %} -
    -
    -
    -

    - Why Python? -

    -
    -

    - We truly believe and support the impact and innovation that Python has - brought in the whole technology industry as it continues to power systems, products, and services of companies such - as Google, YouTube, NASA, Disney, Instagram, Disqus, Pinterest and Bitbucket. -

    -

    - Python is also used as a business solution for Web Development, Automation, Monitoring, - Artificial Intelligence, Data Science, Cloud Computing, and more. -

    -
    -
    -
    -
    + + {% include "landing/our_team.html" %} - -
    -
    -
    -

    - What We Do -

    -
    -

    - In June 31-July 1 2012, we held the first - ever PyCon Philippines. -

    -

    - Today, we organize the yearly PyCon and also - hold regular meet-ups, public python trainings and - kaizend throughout the year. -

    -

    - Whether you're new to programming, an experienced - practitioner, or just plain curious what this Python - programming language is about, you're much welcome - to join this community! -

    -
    -
    -
    -
    -

    - Our Events -

    -
    + + {% include "landing/code_of_conduct.html" %} -
    -
    -
    -

    - -

    -
    - -
    -
    -

    - The goal of the conference is to provide - a venue where the Python programming - language and surrounding technologies - can be explored, discussed and - exercised. -

    -

    - We gather software engineers, - programming enthusiasts, startup - founders, corporate IT decision makers, - students and IT educators in a 2-day - event where we can collaborate and learn - from each other. -

    -
    -
    -
    -
    -
    -

    - -

    -
    - -
    -
    -

    - Regular meetups where professionals and - enthusiasts share and talk about Python. -

    -
    -
    -
    -
    -
    -

    - -

    -
    - -
    -
    -

    - Low-cost Python Trainings covering - various topics. -

    -
    -
    -
    -
    -
    -

    - -

    -
    -
    -
    -

    - A mastermind group and exclusive - training program for core volunteers. - This program is aimed to develop - technically competent leaders and - systematize succession plans for - PythonPH. -

    -
    -
    -
    -
    - -
    - -
    - -
    - - - -
    - -
    -
    - - - {% include "landing/our_team.html" %} - - - {% include "landing/code_of_conduct.html" %} - - + {% include "landing/mailing_list.html" %} - - - - - -
+ + {% include "landing/footer.html" %} - + + + + + diff --git a/landing/templates/landing/old_index.html b/landing/templates/landing/old_index.html deleted file mode 100644 index ce6ffb3..0000000 --- a/landing/templates/landing/old_index.html +++ /dev/null @@ -1,81 +0,0 @@ -{% load static from staticfiles %} -{% load compress %} - - - - - - - - - Python Philippines - - - - - - {% compress css %} - - {% endcompress %} - - - -
-
-
-
- -
-

- Python - Philippines -

-
- -
- - {% if sections %} - {% for section in sections %} -
-

{{ section.name }}

- {{ section.content|safe }} -
- {% endfor %} - {% endif %} - - {% if events %} -
-

Public Trainings

- -
- {% endif %} - - {% include "landing/team.html" %} - -
-
- - - diff --git a/landing/templates/landing/our_aim.html b/landing/templates/landing/our_aim.html new file mode 100644 index 0000000..b457250 --- /dev/null +++ b/landing/templates/landing/our_aim.html @@ -0,0 +1,56 @@ +{% load static %} + +
+
+ +
+
+
+

+ Our Aim +

+
    +
  • + To show that Python has something for everyone: from hobbyists, to educators, to students, to professionals. +
  • +
  • + To inspire Filipinos to excel in their craft through Python and Open Source. +
  • +
  • + To provide a safe space where the Python programming language and surrounding technologies can be explored, discussed and exercised. +
  • +
+
+

+ We believe that we create small dents of improvement in the PH Tech industry when we foster environments that inspire and motivate individuals to be technically competent and passionate about their craft. +

+ + Get to know us + +
+
+
+
diff --git a/landing/templates/landing/what_we_do/index.html b/landing/templates/landing/what_we_do/index.html new file mode 100644 index 0000000..6fd8241 --- /dev/null +++ b/landing/templates/landing/what_we_do/index.html @@ -0,0 +1,155 @@ +{% load static %} +
+
+
+

+ What We Do +

+
+

+ In June 31-July 1 2012, we held the first ever PyCon Philippines. +

+

+ Today, we organize the yearly PyCon and also hold regular meet-ups, public python trainings and kaizend throughout the year. +

+

+ Whether you're new to programming, an experienced practitioner, or just plain curious what this Python programming language is about, you're much welcome to join this community! +

+
+
+ + +
+
+

+ Our Events +

+
+ + +
+
+
+

+ +

+
+
+
+

+ The goal of the conference is to provide a venue where the Python programming language and surrounding technologies can be explored, discussed and exercised. +

+

+ We gather software engineers, programming enthusiasts, startup founders, corporate IT decision makers, students and IT educators in a 2-day event where we can collaborate and learn from each other. +

+
+
+
+
+
+

+ +

+
+
+
+

+ Regular meetups where professionals and enthusiasts share and talk about Python. +

+
+
+
+
+
+

+ +

+
+
+
+

+ Low-cost Python Trainings covering various topics. +

+
+
+
+
+
+

+ +

+
+
+
+

+ A mastermind group and exclusive training program for core volunteers. This program is aimed to develop technically competent leaders and systematize succession plans for PythonPH. +

+
+
+
+
+ + + +
+ + +
+ +
+ +
+
+
diff --git a/landing/templates/landing/why_python.html b/landing/templates/landing/why_python.html new file mode 100644 index 0000000..36d455c --- /dev/null +++ b/landing/templates/landing/why_python.html @@ -0,0 +1,27 @@ +
+
+
+

+ Why Python? +

+
+

+ We believe Python changes lives. +

+ +

+ It gives everyday people the tools to create, solve problems, and share ideas with the world—while also powering industries from AI and data science to cloud computing and automation. +

+ +

+ From students building their first websites, to small teams streamlining workflows, to researchers and companies tackling big challenges—Python is there. +

+ +

+ Simple enough to start with, powerful enough to shape the future. + And at PythonPH, we see it every day in our community: people learning, teaching, and creating together. That’s the heart of why we do what we do. +

+
+
+
+
From c39de1bc9e3a9e03ffe8d64dfdeba2d3a141928e Mon Sep 17 00:00:00 2001 From: Zorex Salvo Date: Mon, 15 Sep 2025 12:45:01 +0800 Subject: [PATCH 3/5] Refactor: Update board and committee context Refactored the landing page view to provide board members as a static list instead of querying the Volunteer model. Also renamed 'commitees' to 'committees' for consistency and updated the template context accordingly. This improves maintainability and fixes template variable mismatches. --- landing/templates/landing/our_team.html | 183 +++------------------- landing/templates/landing/why_python.html | 2 +- landing/views.py | 68 ++++++-- 3 files changed, 84 insertions(+), 169 deletions(-) diff --git a/landing/templates/landing/our_team.html b/landing/templates/landing/our_team.html index 565116d..8e625ef 100644 --- a/landing/templates/landing/our_team.html +++ b/landing/templates/landing/our_team.html @@ -1,4 +1,4 @@ -{% load static from staticfiles %} + {% load static %}
+ + {% for member in board_members %}
@@ -77,148 +79,15 @@ class="w-full h-full object-cover rounded-13 md:rounded-24 cursor-pointer max-w-144 max-h-144" data-bs-toggle="tooltip" data-bs-html="true" - title="
Micaela Reyes
Director of Operations
" - src="{% static "landing/assets/img/people/micaela.jpg" %}" - data-aos="py-slide" - /> -
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
-
-
+ {% endfor %}
+

- {% for commitee in commitees %} -
-

- {{ commitee.name }} -

-
    - {% for volunteer in commitee.volunteers.all %} -
  • {{ volunteer.display_name }}
  • - {% endfor %} -
-
+ {% for committee in committees %} +
+

+ {{ committee.name }} +

+
    + {% for volunteer in commitee.volunteers.all %} +
  • {{ volunteer.display_name }}
  • + {% endfor %} +
+
{% endfor %}
diff --git a/landing/templates/landing/why_python.html b/landing/templates/landing/why_python.html index 36d455c..57fb1f4 100644 --- a/landing/templates/landing/why_python.html +++ b/landing/templates/landing/why_python.html @@ -4,7 +4,7 @@

Why Python?

-
+

We believe Python changes lives.

diff --git a/landing/views.py b/landing/views.py index ae41cde..a60965c 100644 --- a/landing/views.py +++ b/landing/views.py @@ -1,14 +1,9 @@ from django.shortcuts import render - -from .models import Event, Section -from organisation.models import Volunteer, Commitee +from organisation.models import Commitee def index(request): - events = Event.available_objects.all() - sections = Section.available_objects.all() - board_members = Volunteer.available_objects.filter(is_staff=True) - commitees = Commitee.available_objects.prefetch_related('volunteers') + committees = Commitee.available_objects.prefetch_related('volunteers') python_hour = [ { "link": "#", @@ -39,10 +34,61 @@ def index(request): } ] + board_members = [ + { + "name": "Matt Lebrun", + "position": "President", + "image": "landing/assets/img/people/matt.jpg", + }, + { + "name": "Micaela Reyes", + "position": "Director of Operations", + "image": "landing/assets/img/people/micaela.jpg", + }, + { + "name": "Sony Valdez", + "position": "Director of Community Relations", + "image": "landing/assets/img/people/shuny.jpg", + }, + { + "name": "Angelica Lapastora", + "position": "Director of Sponsorship", + "image": "landing/assets/img/people/anj.jpg", + }, + { + "name": "Zorex Salvo", + "position": "Director of Engineering", + "image": "landing/assets/img/people/zorex.jpg", + }, + { + "name": "Ciara Bautista", + "position": "Treasurer", + "image": "landing/assets/img/people/ciara.jpg", + }, + { + "name": "Freilla Mae Espinola", + "position": "Director of Diversity and Outreach", + "image": "landing/assets/img/people/freilla.png", + }, + { + "name": "Rodney Lei Estrada", + "position": "Board of Trustee and Corporate Secretary", + "image": "landing/assets/img/people/rodney.jpg", + }, + { + "name": "Lalaine Diok", + "position": "Director of Marketing", + "image": "landing/assets/img/people/lalaine.jpg", + }, + { + "name": "Alex Reyes", + "position": "Director of Design", + "image": "landing/assets/img/people/alex.jpg", + }, + ] + return render(request, 'landing/index.html', { - 'events': events, - 'sections': sections, - 'board_members': board_members, - 'commitees': commitees, + 'committees': committees, 'python_hour': python_hour, + 'board_members': board_members }) From e773407de95aaf06e496a31bdf0d539e9f49009d Mon Sep 17 00:00:00 2001 From: Zorex Salvo Date: Mon, 15 Sep 2025 13:28:15 +0800 Subject: [PATCH 4/5] Fix: Correct template variable for committees Updated the our_team.html template to use the correct 'committees' variable instead of the misspelled 'commitees'. This ensures committee data is displayed properly and aligns with the updated view context. --- landing/templates/landing/our_team.html | 42 ++++++++++++++----------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/landing/templates/landing/our_team.html b/landing/templates/landing/our_team.html index 8e625ef..09ee789 100644 --- a/landing/templates/landing/our_team.html +++ b/landing/templates/landing/our_team.html @@ -94,6 +94,7 @@ > Core Volunteers +
{% for committee in committees %} -
-

- {{ committee.name }} -

-
    - {% for volunteer in commitee.volunteers.all %} -
  • {{ volunteer.display_name }}
  • - {% endfor %} -
-
+ {% if forloop.counter0|divisibleby:3 %} +
+
+ {% endif %} +
+

+ {{ committee.name }} +

+
    + {% for volunteer in committee.volunteers.all %} +
  • {{ volunteer }}
  • + {% endfor %} +
+
{% endfor %}
+
From fdc68b60c0086b42a263087be903b6252e6b8576 Mon Sep 17 00:00:00 2001 From: Zorex Salvo Date: Fri, 3 Oct 2025 21:49:46 +0800 Subject: [PATCH 5/5] feat: Refresh team members list --- .../static/landing/assets/img/people/cyrus.jpg | Bin 0 -> 20479 bytes landing/views.py | 16 ++++++---------- 2 files changed, 6 insertions(+), 10 deletions(-) create mode 100644 landing/static/landing/assets/img/people/cyrus.jpg diff --git a/landing/static/landing/assets/img/people/cyrus.jpg b/landing/static/landing/assets/img/people/cyrus.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f0c6bbac50ba607f8dd1634a975f44052d9eceb GIT binary patch literal 20479 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