From 73290622a59fdf76b672279889e406fb56d53769 Mon Sep 17 00:00:00 2001
From: Eric Holscher
Date: Fri, 5 Dec 2025 09:13:26 -0600
Subject: [PATCH 01/14] 2026 Portland website launch
Updates based on feedback from Katie
---
docs/_templates/2026/menu-desktop.html | 4 +-
docs/_templates/2026/menu-mobile.html | 4 +-
docs/conf/portland/2026/about.md | 2 +-
.../portland/2026/convince-your-manager.md | 4 +-
docs/conf/portland/2026/hike.md | 12 +--
docs/conf/portland/2026/lightning-talks.md | 16 +---
docs/conf/portland/2026/opportunity-grants.md | 4 +-
docs/conf/portland/2026/social-events.md | 4 +-
docs/conf/portland/2026/unconference.md | 18 ++--
docs/conf/portland/2026/venue.md | 8 +-
docs/conf/portland/2026/volunteer.md | 14 ++-
docs/conf/portland/2026/writing-day.md | 89 +------------------
12 files changed, 30 insertions(+), 149 deletions(-)
diff --git a/docs/_templates/2026/menu-desktop.html b/docs/_templates/2026/menu-desktop.html
index 5ed9097f67..9d0f0dd8e2 100644
--- a/docs/_templates/2026/menu-desktop.html
+++ b/docs/_templates/2026/menu-desktop.html
@@ -63,11 +63,13 @@
{% if not flagisvirtual %}
Visiting {{ city }}
Attendee Guide
- Health and Safety Policy
Volunteer Info
{% endif %}
Virtual Attendance
+ {% if not flagisvirtual %}
+ Health and Safety Policy
+ {% endif %}
Code of Conduct
{% if flagspeakersannounced %}
Meet the Team
diff --git a/docs/_templates/2026/menu-mobile.html b/docs/_templates/2026/menu-mobile.html
index a4c297b757..7b7b4c46ba 100644
--- a/docs/_templates/2026/menu-mobile.html
+++ b/docs/_templates/2026/menu-mobile.html
@@ -48,10 +48,12 @@
{% if not flagisvirtual %}
Visiting {{ city }}
Attendee Guide
- Health and Safety Policy
Volunteer Info
{% endif %}
Virtual Attendance
+ {% if not flagisvirtual %}
+ Health and Safety Policy
+ {% endif %}
Code of Conduct
{% if flagspeakersannounced %}
Meet the Team
diff --git a/docs/conf/portland/2026/about.md b/docs/conf/portland/2026/about.md
index 9a5331bed7..e76056c0c8 100644
--- a/docs/conf/portland/2026/about.md
+++ b/docs/conf/portland/2026/about.md
@@ -10,5 +10,5 @@ We invite you to join hundreds of other folks for a three-day event to explore t
The Write the Docs conference covers any topic related to documentation in the software industry.
Past talks have also covered such diverse topics as empathy, the history of math symbols, and using emoji to keep your users' attention.
-Write the Docs brings *everyone* who writes the docs together in the same room: Writers, developers, support engineers, community managers, developer relations, and more.
+Write the Docs brings *everyone* who writes the docs together in the same room: writers, developers, support engineers, community managers, developer relations, and more.
We all have things to learn, and there's no better way than gathering at our events and sharing knowledge.
diff --git a/docs/conf/portland/2026/convince-your-manager.md b/docs/conf/portland/2026/convince-your-manager.md
index 330fb5a119..14a61bd809 100644
--- a/docs/conf/portland/2026/convince-your-manager.md
+++ b/docs/conf/portland/2026/convince-your-manager.md
@@ -24,7 +24,7 @@ Remember to change the things in [brackets]!
*Write the Docs conferences bring together everyone who writes the docs – Tech Writers, Developers, Developer Relations, Customer Support – making the events an ideal networking opportunity. Each conference successfully combines a number of different event formats to deliver engaging, practical, and timely content.*
-*There is a single track of talks, a parallel unconference event, and a community writing day. The [sessions from last year](https://www.writethedocs.org/conf/portland/2024/speakers/) will give you a good idea of the kinds of topics covered, many of which are relevant to my work.*
+*There is a single track of talks, a parallel unconference event, and a community writing day. The [sessions from last year](https://www.writethedocs.org/conf/portland/2025/speakers/) will give you a good idea of the kinds of topics covered, many of which are relevant to my work.*
*Costs:*
@@ -94,7 +94,7 @@ Peer review new and existing documentation*
When discussing how to pitch Writing Day, a few helpful tips emerged:
-- Highlight specific projects from a previous [Writing Day project list. ](https://www.writethedocs.org/conf/portland/2023/writing-day/#project-listing)
+- Highlight specific projects from a previous [Writing Day project list.](https://www.writethedocs.org/conf/portland/2025/writing-day/#project-listing)
- If your community is looking for regular documentation contributions, this is a great place to onboard potential contributors and editors.
- Attending raises the visibility of your company in the community.
- Establishes your team's reputation for caring about their docs.
diff --git a/docs/conf/portland/2026/hike.md b/docs/conf/portland/2026/hike.md
index 439509099d..43f6e92004 100644
--- a/docs/conf/portland/2026/hike.md
+++ b/docs/conf/portland/2026/hike.md
@@ -12,17 +12,7 @@ We will be hiking in the amazing [Forest Park](https://forestparkconservancy.org
**The hike is around 5 miles long with 1,200 feet of elevation gain and is classified as a moderate hike. We’ll be going nice and slow so people can appreciate the views and forest.**
-It’s rained on us in the past, but we have faith it will be beautiful this year! We will hopefully see Mount Hood at the top :)
-
-
-
-
+It's rained on us in the past, but we have faith it will be beautiful this year! We will hopefully see Mount Hood at the top :)
## Schedule & Logistics
diff --git a/docs/conf/portland/2026/lightning-talks.md b/docs/conf/portland/2026/lightning-talks.md
index bd57e3998a..8be4521c19 100644
--- a/docs/conf/portland/2026/lightning-talks.md
+++ b/docs/conf/portland/2026/lightning-talks.md
@@ -10,16 +10,6 @@ A Lightning Talk is a brief presentation, lasting up to five minutes, where you
Lightning Talks are a fantastic opportunity for first-time speakers. Regardless of your speaking experience, we invite you to submit a talk.
-
-
-
-
**Supporting first-time speakers is important to us, so we have created two speaker categories:**
- First-time speakers
@@ -35,10 +25,8 @@ Submit your Lightning Talk in person at the registration/check-in table.
**Submissions are open:**
-- During Writing Day on Sunday
-- Monday morning, until the end of the last morning break
-- Monday afternoon, post-Monday Lightning Talks
-- Tuesday morning, until the end of the last morning break
+- One week prior to the conference (Monday submissions only)
+- During the conference from Sunday to Tuesday morning, until the end of the last morning break
**Speaker selection and announcements:**
diff --git a/docs/conf/portland/2026/opportunity-grants.md b/docs/conf/portland/2026/opportunity-grants.md
index 6e05616531..cec924696e 100644
--- a/docs/conf/portland/2026/opportunity-grants.md
+++ b/docs/conf/portland/2026/opportunity-grants.md
@@ -23,7 +23,7 @@ Grant applicants, like all other participants in the Write the Docs community, a
## Schedule
- **Now - {{ grants.ends }}:** Grant applications open
-- **{{ grants.notification }}:** Grant recipients notified
+- **February 13, 2026:** Grant recipients notified
## What is Covered
@@ -42,7 +42,7 @@ The application form will ask for an estimate of your costs.
## Grant Amounts
-The total amount of grant funds to be distributed is based upon sponsors and number of tickets sold. We will not know the full amount until we near the deadline. In 2024, $3,500 was distributed in grant funds. There is no limit on the amount you request, but please consider this amount when making your request. We rarely fund only one individual and aim to use our budget for two or more people. We do not award partial grants.
+The total amount of grant funds to be distributed is based upon sponsors and number of tickets sold. We will not know the full amount until we near the deadline. For 2026, we have $3,500 total to distribute for grant funds. There is no limit on the amount you request, but please consider this amount when making your request. We rarely fund only one individual and aim to use our budget for two or more people. We do not award partial grants.
## Are you part of a marginalized or underrepresented group in tech?
diff --git a/docs/conf/portland/2026/social-events.md b/docs/conf/portland/2026/social-events.md
index 824ec1f5b8..9c8c36d42e 100644
--- a/docs/conf/portland/2026/social-events.md
+++ b/docs/conf/portland/2026/social-events.md
@@ -26,9 +26,7 @@ and make sure you know your way around the conference venue.
Join us for our Monday night social event! This is a great chance to meet more of your fellow documentarians
and chat about the conference in a relaxed atmosphere.
-**Where**: {{about.social_venue}}
+**Where**: TBD
**When**: 7-9 PM
*Both alcoholic and non-alcoholic drinks and snacks will be provided.*
-
-Sponsored by [Mintlify](https://mintlify.com/?utm_source=writethedocs&utm_medium=referral)!
diff --git a/docs/conf/portland/2026/unconference.md b/docs/conf/portland/2026/unconference.md
index 56bab72ae6..3afc312793 100644
--- a/docs/conf/portland/2026/unconference.md
+++ b/docs/conf/portland/2026/unconference.md
@@ -12,16 +12,6 @@ The Unconference consists of attendee-driven sessions that provide the opportuni
Everyone! All attendees are invited to lead a session on a topic. Sessions can be organized around a presentation, group discussion or anything in between.
-
-
-
-
**Who can attend an Unconference session?**
Everyone!
@@ -36,9 +26,11 @@ Everyone!
- Each session is 40 minutes in length
### Scheduling a Session
-- Sign up during Writing Day or the Welcome Reception on Sunday, and anytime during the conference on Monday and Tuesday.
-- Write the title and your name on a note. Select a time slot and table number and place the note on the large schedule. You can only sign up in person.
-- The online version will be updated periodically throughout the conference.
+
+- Sign up online one week prior to the conference (Monday morning sessions only).
+- Sign up for all sessions in-person anytime during the conference, Sunday through Tuesday.
+- During the conference, write the title and your name on a sticky note. Select a time slot and table number and place the note on the large schedule.
+- The online schedule will be available to view only during the conference. This will be updated regularly.
Exact times to be posted on our [Schedule](/conf/{{shortcode}}/{{year}}/schedule) page.
diff --git a/docs/conf/portland/2026/venue.md b/docs/conf/portland/2026/venue.md
index 881c3a469a..c9868a63ef 100644
--- a/docs/conf/portland/2026/venue.md
+++ b/docs/conf/portland/2026/venue.md
@@ -17,15 +17,15 @@ Our conference will be held at Revolution Hall, a beautiful venue located in the
If you drive to the conference, note that the venue does not have parking onsite. There is street parking east of the venue (15th Ave. and higher street numbers) and allows for all-day free parking. Additionally, there is 1-2 hour street parking directly around the venue.
-Bus transit stops are located near the venue. All transit in Portland announce major stops verbally in English, and most buses have a visual display of upcoming stops. Refer to the [Visiting Portland page](https://www.writethedocs.org/conf/portland/2026/visiting/) for more information on public transportation.
+Bus transit stops are located near the venue. All transit in Portland announce major stops verbally in English, and most buses have a visual display of upcoming stops. More information on public transportation will be shared as the conference nears.
## Conference Layout
### Registration and Welcome Wagon
**Location:**
-- May 2: 1st floor near Martha's Cafe
-- May 3-5: 2nd floor
+- May 3: 1st floor near Martha's Cafe
+- May 4-5: 2nd floor
### Writing Day, Unconference, and Welcome Reception
@@ -41,7 +41,7 @@ Bus transit stops are located near the venue. All transit in Portland announce m
### Other Venue Spaces (open to the public)
-- Martha’s Coffee: 7-3pm
+- Martha's Coffee: 7am-3pm
- Show Bar: 3-11pm
- Roof Deck: 3-11pm, weather permitting
- Outdoor seating and city park
diff --git a/docs/conf/portland/2026/volunteer.md b/docs/conf/portland/2026/volunteer.md
index 513b288881..63f140b680 100644
--- a/docs/conf/portland/2026/volunteer.md
+++ b/docs/conf/portland/2026/volunteer.md
@@ -6,7 +6,7 @@ banner: _static/conf/images/headers/2025/volunteer.jpg
# Volunteer Information
-Our volunteer application is open! We are looking for volunteers to provide support with a variety of conference roles - registration, Writing Day, Unconference, stage support, catering, load out, and more.
+Our volunteer sign up form is open. We are looking for volunteers to provide support with a variety of conference roles - registration, Writing Day, Unconference, float, catering, load out, and more.
Completing this form signs you up to volunteer. We will close the form once volunteer capacity is reached. Another form will be sent out once the speaker schedule is released mid-February.
@@ -24,8 +24,8 @@ Each individual must volunteer for two or more 3-4 hour shifts and receives a **
**Timeline:**
-- **Now - February 14**: Volunteer applications open
-- **February 14 - March 26**: Volunteer schedule sign up open
+- **Now-February 13**: Volunteer applications open
+- **February 13-March 27**: Volunteer schedule sign up open
- **End of March**: Volunteer schedule emailed
## Volunteer Roles
@@ -38,17 +38,13 @@ Each individual must volunteer for two or more 3-4 hour shifts and receives a **
- Check in attendees, provide general information inquiries, answer venue questions, and field other requests or direct individuals to the correct staff member who can provide support.
-### Stage Support
-
-- Assist presenters while on stage - troubleshoot issues with slides, video, or audio portions of their presentation. Please apply for this role if you have some A/V knowledge; it is not required, but experience with different operating systems is a plus!
-
### Unconference
- Assist the Unconference coordinator, help folks sign up to host a session, maintain an updated schedule, direct individuals and groups to their tables, and keep tables looking neat.
-### Catering
+### Float
-- Set up catering, replenish beverages and snacks, and notify venue staff of coffee refills and cleaning needs.
+- Provide support where needed. Be a runner. Support staff with catering set up.
### Venue Load Out
diff --git a/docs/conf/portland/2026/writing-day.md b/docs/conf/portland/2026/writing-day.md
index 3a7f836a3a..edfc8865a4 100644
--- a/docs/conf/portland/2026/writing-day.md
+++ b/docs/conf/portland/2026/writing-day.md
@@ -33,13 +33,7 @@ If you have a project, we encourage you to submit it before the conference! This
- Love letters
- The Documentarian Manifesto
-Find specific examples on the [Portland Writing Day 2023 project list](https://www.writethedocs.org/conf/portland/2023/writing-day/#project-listing).
-
-
+Find specific examples on the [Portland Writing Day 2025 project list](https://www.writethedocs.org/conf/portland/2025/writing-day/#project-listing).
## Schedule
@@ -73,12 +67,6 @@ Come with the following tools:
Leading a project at Writing Day is a wonderful opportunity to engage with documentarians from a variety of backgrounds, experience, and expertise. Their collective wealth of experience can upgrade your documentation and create a more inclusive project. This empowers all of us to work together to create opportunities for each other and bigger, better communities.
-
-
**Tips to create and lead a new project effectively:**
- **Provide a project overview with a specific focus or goals:** Your overview is a 2 minute pitch that describes your project and clearly defines a focus area or goal.
@@ -105,78 +93,3 @@ Writing Day is the perfect opportunity to participate and learn about new projec
**We're excited to have another wonderful Writing Day!**
-
-## Project List
-
-### Enhance Your Portfolio! Contribute to an Open Source Repository
-
-Project organizer: Mike Jang, he/him.
-
-While we've open sourced our enterprise [documentation repository](https://github.com/nginx/documentation), we've done something different. We've set up [Good first issues](https://github.com/nginx/documentation/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22good%20first%20issue%22) that do not require Git knowledge.
-
-We love all types of contributions. Examples:
-
-- We have not completed our move towards "sentence case" in our headings
-- We are missing alternative text for a few of our screenshots
-
-If you've never used git or if you're already an expert, we welcome your contributions.
-
-If you're a technical expert, our Good first issues give you the chance to test our how-tos and tutorials! If you remember Manny Silva's [Docs as Tests](https://www.docsastests.com/), several of our Good first issues include testable procedures.
-
-**And we hope to have interesting swag!**
-
-### Docs as Tests and Doc Detective: Help us test your docs!
-
-Project organizer: Manny Silva, he/him. Project session: All day.
-
-[Docs as Tests](https://www.docsastests.com/) and [Doc Detective](https://doc-detective.com/) are back at Writing Day and our goal is to test at least 10 docs sets! Does your project or product have a UI? APIs? SDKs? We can help you test them and keep your docs accurate.
-
-Docs as Tests is a strategy for keeping docs up-to-date by treating procedures and code snippets as testable assertions of product behavior. You have the docs, so let's get testing! By validating that documentation contents work as written, you can:
-
-- Prevent broken docs
-- Ensure consistent UX between docs and products
-- Build user trust
-
-We want every writer to be confident in their docs. Come by our table, and we’ll help you set up Docs as Tests with whatever tools (like Doc Detective) or strategies (like unit testing code snippets) are appropriate. Establish a zero-trust relationship between your docs and product, catching bugs in both as you go.
-
-### Help improve the WTD Salary Survey
-
-* Project organizer: Kay Smoljak, she/her.
-* Project session: Afternoon.
-
-The [Write the Docs Salary Survey](https://writethedocs.org/surveys/) has been running annually since 2019, with the goal of identifying appropriate salary ranges and providing a basis for pay negotiations.
-
-Our goal for Writing Day is to improve the clarity, inclusivity, neutrality and relevance of the [questions, instructions, and general flow of the survey](https://github.com/writethedocs/salary-survey?tab=readme-ov-file#write-the-docs-annual-documentation-salary-survey).
-
-### Research the Docs! (Sponsor session)
-
-Project organizer: Kyle Rollins, he/him. Project session: All day.
-
-Join the MongoDB docs and design teams for a dual-purpose documentation research project.
-
-*What is this?*
-
-* An opportunity to work with a product designer on a research activity.
-* Learn how to give qualitative feedback using MongoDB documentation.
-
-*Why participate?*
-
-* Join us to experience professional product research in action.
-* Leave with the knowledge and materials to facilitate your own documentation research project.
-
-Your participation helps the MongoDB team better understand the MongoDB docs’ strengths and weaknesses. It also gives MongoDB team the opportunity to share how you can facilitate your own documentation research project. We appreciate your help in making the MongoDB documentation the best that it can be.
-
-### Crowdsource the Docs: Help improve Docker's API reference
-
-Project organizer: Sarah Sanders, she/her. Project session: All day.
-
-[Docker’s API Docs](https://github.com/docker/docs/tree/main/content/reference/api) are critical for developers and they could use some TLC! Docker's API docs are a part of our open source offerings. We need your help to crowdsource and implement feedback to improve our API documentation.
-
-Our goal is to work together to make the docs more clear, helpful, and user-friendly.
-
-Here's our plan of action:
-
-* Review the current Docker API pages to identify gaps and UX issues.
-* Brainstorm ways to improve clarity, usefulness, and approachability.
-
-Whether you're great at structuring docs, writing clear examples, identifying pain points, or just love helping others understand complex systems - this project is for you!
From c0870277668ceee7d5d2577add2606593b4a3f91 Mon Sep 17 00:00:00 2001
From: Eric Holscher
Date: Fri, 5 Dec 2025 09:16:38 -0600
Subject: [PATCH 02/14] Remove photo
---
docs/conf/portland/2026/unconference.md | 2 --
1 file changed, 2 deletions(-)
diff --git a/docs/conf/portland/2026/unconference.md b/docs/conf/portland/2026/unconference.md
index 3afc312793..1f71521401 100644
--- a/docs/conf/portland/2026/unconference.md
+++ b/docs/conf/portland/2026/unconference.md
@@ -16,8 +16,6 @@ Everyone! All attendees are invited to lead a session on a topic. Sessions can b
Everyone!
-
-
## Schedule
**Date: {{ unconf.date }}**
From 372659190ccfe2f23600d052fd29b70a43ea6fd6 Mon Sep 17 00:00:00 2001
From: Eric Holscher
Date: Fri, 5 Dec 2025 09:20:48 -0600
Subject: [PATCH 03/14] Adjust nav
---
docs/_data/portland-2026-config.yaml | 9 +++++++--
docs/_templates/2026/menu-desktop.html | 6 +++++-
docs/_templates/2026/menu-mobile.html | 6 +++++-
3 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/docs/_data/portland-2026-config.yaml b/docs/_data/portland-2026-config.yaml
index a5bf06e8db..b461287ce5 100644
--- a/docs/_data/portland-2026-config.yaml
+++ b/docs/_data/portland-2026-config.yaml
@@ -203,7 +203,7 @@ sponsors:
in_kind:
# Things that change over time, listed in order of change
-flaglanding: True
+flaglanding: False
flaghassponsors: False
flagcfp: True
flagticketsonsale: False
@@ -213,7 +213,7 @@ flagrunofshow: False
flaghasschedule: False
flagscheduleincomplete: True
flaghasshirts: False
-flaglivestreaming: True
+flaglivestreaming: False
flagvideos: False
flagpostconf: False
flaghasbadgeflair: False
@@ -226,3 +226,8 @@ flaghaswritingday: True
flaghaslightningtalks: True
flaghasjobfair: True
flaghasboat: False
+
+# Pages to be linked in January 2026
+flaghasvisiting: False
+flaghasattendeeguide: False
+flaghasteam: False
diff --git a/docs/_templates/2026/menu-desktop.html b/docs/_templates/2026/menu-desktop.html
index 9d0f0dd8e2..daf4cbe431 100644
--- a/docs/_templates/2026/menu-desktop.html
+++ b/docs/_templates/2026/menu-desktop.html
@@ -61,8 +61,12 @@
- Venue
{% if not flagisvirtual %}
+ {% if flaghasvisiting %}
- Visiting {{ city }}
+ {% endif %}
+ {% if flaghasattendeeguide %}
- Attendee Guide
+ {% endif %}
- Volunteer Info
{% endif %}
@@ -71,7 +75,7 @@
- Health and Safety Policy
{% endif %}
- Code of Conduct
- {% if flagspeakersannounced %}
+ {% if flaghasteam %}
- Meet the Team
{% endif %}
- Contact us
diff --git a/docs/_templates/2026/menu-mobile.html b/docs/_templates/2026/menu-mobile.html
index 7b7b4c46ba..742dd5eec1 100644
--- a/docs/_templates/2026/menu-mobile.html
+++ b/docs/_templates/2026/menu-mobile.html
@@ -46,8 +46,12 @@
- Venue
{% if not flagisvirtual %}
+ {% if flaghasvisiting %}
- Visiting {{ city }}
+ {% endif %}
+ {% if flaghasattendeeguide %}
- Attendee Guide
+ {% endif %}
- Volunteer Info
{% endif %}
- Virtual Attendance
@@ -55,7 +59,7 @@
- Health and Safety Policy
{% endif %}
- Code of Conduct
- {% if flagspeakersannounced %}
+ {% if flaghasteam %}
- Meet the Team
{% endif %}
- Contact us
From eaee25ae24a52543b84bc5f1c502b9a67b76015c Mon Sep 17 00:00:00 2001
From: Eric Holscher
Date: Fri, 5 Dec 2025 17:00:46 +0000
Subject: [PATCH 04/14] Portland 2026: Update schema with new page flags
---
docs/_data/schema-config.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/docs/_data/schema-config.yaml b/docs/_data/schema-config.yaml
index 009a0e4335..e97799974a 100644
--- a/docs/_data/schema-config.yaml
+++ b/docs/_data/schema-config.yaml
@@ -66,6 +66,9 @@ flaghasboat: bool()
flaglanding: bool()
flaghasbadgeflair: bool(required=False)
flaghasfood: bool(required=False)
+flaghasvisiting: bool(required=False)
+flaghasattendeeguide: bool(required=False)
+flaghasteam: bool(required=False)
---
From e8e3fdff492c38215992e4f338bd5de26bc20621 Mon Sep 17 00:00:00 2001
From: Eric Holscher
Date: Fri, 5 Dec 2025 11:18:55 -0600
Subject: [PATCH 05/14] Update images
---
docs/_scripts/process_flickr_images.py | 144 ++++++++++++++++++
.../images/headers/2026/attendee-guide.jpg | Bin 0 -> 85784 bytes
.../headers/2026/convince-your-manager.jpg | Bin 0 -> 50349 bytes
.../_static/conf/images/headers/2026/hike.jpg | Bin 0 -> 240140 bytes
.../images/headers/2026/lightning-talks.jpg | Bin 0 -> 35668 bytes
.../_static/conf/images/headers/2026/news.jpg | Bin 0 -> 88008 bytes
.../conf/images/headers/2026/prospectus.jpg | Bin 0 -> 83067 bytes
docs/_static/conf/images/headers/2026/qa.jpg | Bin 0 -> 48861 bytes
.../images/headers/2026/social-events.jpg | Bin 0 -> 105820 bytes
.../conf/images/headers/2026/speakers.jpg | Bin 0 -> 93986 bytes
.../conf/images/headers/2026/sponsors.jpg | Bin 0 -> 67920 bytes
.../_static/conf/images/headers/2026/team.jpg | Bin 0 -> 91653 bytes
.../conf/images/headers/2026/tickets.jpg | Bin 0 -> 58003 bytes
.../conf/images/headers/2026/unconference.jpg | Bin 0 -> 102413 bytes
.../conf/images/headers/2026/virtual.jpg | Bin 0 -> 83746 bytes
.../conf/images/headers/2026/visiting.jpg | Bin 0 -> 205556 bytes
.../conf/images/headers/2026/volunteer.jpg | Bin 0 -> 91327 bytes
.../conf/images/headers/2026/writing-day.jpg | Bin 0 -> 79962 bytes
docs/conf/portland/2026/attendee-guide.md | 1 +
.../portland/2026/convince-your-manager.md | 2 +-
docs/conf/portland/2026/hike.md | 2 +-
docs/conf/portland/2026/lightning-talks.md | 2 +-
docs/conf/portland/2026/news/index.rst | 1 +
docs/conf/portland/2026/opportunity-grants.md | 2 +-
docs/conf/portland/2026/qa.rst | 1 +
docs/conf/portland/2026/social-events.md | 1 +
docs/conf/portland/2026/speakers.rst | 2 +-
docs/conf/portland/2026/sponsors/index.rst | 2 +-
.../portland/2026/sponsors/prospectus.rst | 2 +-
docs/conf/portland/2026/team.md | 2 +-
docs/conf/portland/2026/tickets.rst | 2 +-
docs/conf/portland/2026/unconference.md | 2 +-
docs/conf/portland/2026/virtual.md | 1 +
docs/conf/portland/2026/visiting.md | 2 +-
docs/conf/portland/2026/volunteer.md | 2 +-
docs/conf/portland/2026/writing-day.md | 2 +-
36 files changed, 162 insertions(+), 13 deletions(-)
create mode 100644 docs/_scripts/process_flickr_images.py
create mode 100644 docs/_static/conf/images/headers/2026/attendee-guide.jpg
create mode 100644 docs/_static/conf/images/headers/2026/convince-your-manager.jpg
create mode 100644 docs/_static/conf/images/headers/2026/hike.jpg
create mode 100644 docs/_static/conf/images/headers/2026/lightning-talks.jpg
create mode 100644 docs/_static/conf/images/headers/2026/news.jpg
create mode 100644 docs/_static/conf/images/headers/2026/prospectus.jpg
create mode 100644 docs/_static/conf/images/headers/2026/qa.jpg
create mode 100644 docs/_static/conf/images/headers/2026/social-events.jpg
create mode 100644 docs/_static/conf/images/headers/2026/speakers.jpg
create mode 100644 docs/_static/conf/images/headers/2026/sponsors.jpg
create mode 100644 docs/_static/conf/images/headers/2026/team.jpg
create mode 100644 docs/_static/conf/images/headers/2026/tickets.jpg
create mode 100644 docs/_static/conf/images/headers/2026/unconference.jpg
create mode 100644 docs/_static/conf/images/headers/2026/virtual.jpg
create mode 100644 docs/_static/conf/images/headers/2026/visiting.jpg
create mode 100644 docs/_static/conf/images/headers/2026/volunteer.jpg
create mode 100644 docs/_static/conf/images/headers/2026/writing-day.jpg
diff --git a/docs/_scripts/process_flickr_images.py b/docs/_scripts/process_flickr_images.py
new file mode 100644
index 0000000000..b2da9fb36d
--- /dev/null
+++ b/docs/_scripts/process_flickr_images.py
@@ -0,0 +1,144 @@
+#!/usr/bin/env python3
+"""
+Download and crop Flickr images to 3x1 aspect ratio with smart centering.
+Images are cropped to keep people in frame when possible.
+"""
+
+import os
+import subprocess
+from PIL import Image
+
+
+def process_flickr_images():
+ """Download and process all Flickr images for Portland 2026."""
+
+ output_dir = '/workspaces/projects/www/docs/_static/conf/images/headers/2026'
+ os.makedirs(output_dir, exist_ok=True)
+
+ # Photo IDs
+ flickr_photos = {
+ 'writing-day': '54533185056',
+ 'lightning-talks': '54888818907',
+ 'unconference': '54495525352',
+ 'social-events': '54498891188',
+ 'tickets': '54885637248',
+ 'convince-your-manager': '54506604594',
+ 'volunteer': '54498514462',
+ 'virtual': '54498874517',
+ 'sponsors': '54519655528',
+ 'prospectus': '54919509718',
+ 'news': '54499378371',
+ 'speakers': '54532299817',
+ 'qa': '54510556714',
+ 'attendee-guide': '54885594124',
+ 'team': '54918305952',
+ }
+
+ print("Downloading and cropping Flickr images to 3x1 aspect ratio...")
+ print("=" * 60)
+
+ successful = []
+ failed = []
+
+ for page_name, photo_id in flickr_photos.items():
+ output_file = os.path.join(output_dir, f'{page_name}.jpg')
+ url = f'https://www.flickr.com/photos/writethedocs/{photo_id}/'
+
+ print(f"\n{page_name}...", end=" ")
+
+ try:
+ # Download the HTML page
+ html_file = f'/tmp/{page_name}_page.html'
+ result = subprocess.run(
+ ['curl', '-s', '-L', url, '-o', html_file],
+ timeout=10,
+ capture_output=True
+ )
+
+ if result.returncode == 0 and os.path.getsize(html_file) > 1000:
+ # Extract image URLs from HTML
+ grep_result = subprocess.run(
+ ['grep', '-oP', r'https://live\.staticflickr\.com/[^"]*?_b\.jpg|https://live\.staticflickr\.com/[^"]*?_c\.jpg|https://live\.staticflickr\.com/[^"]*?_h\.jpg'],
+ stdin=open(html_file),
+ capture_output=True,
+ text=True
+ )
+
+ if grep_result.stdout.strip():
+ image_url = grep_result.stdout.strip().split('\n')[0]
+ print(f"downloading...", end=" ")
+
+ # Download the actual image
+ temp_file = f'/tmp/{page_name}_orig.jpg'
+ img_result = subprocess.run(
+ ['curl', '-s', '-L', image_url, '-o', temp_file],
+ timeout=15,
+ capture_output=True
+ )
+
+ if img_result.returncode == 0 and os.path.getsize(temp_file) > 1000:
+ try:
+ img = Image.open(temp_file)
+ width, height = img.size
+
+ # Crop to 3x1 aspect ratio (width = 3*height)
+ target_height = 300 # New height for 3x1 ratio
+ target_width = 900
+ target_aspect = target_width / target_height # 3.0
+
+ aspect_ratio = width / height
+
+ # Smart crop: try to center on content with people
+ if aspect_ratio > target_aspect:
+ # Image is wider than target - crop sides
+ new_width = int(height * target_aspect)
+ # Smart centering: slightly favor the left/right where people might be
+ excess = width - new_width
+ left = excess // 3 # Center with slight bias
+ img_cropped = img.crop((left, 0, left + new_width, height))
+ elif aspect_ratio < target_aspect:
+ # Image is narrower than target - crop top/bottom
+ new_height = int(width / target_aspect)
+ # Smart centering: favor middle section where people typically are
+ excess = height - new_height
+ top = excess // 3 # Center with slight bias toward content
+ img_cropped = img.crop((0, top, width, top + new_height))
+ else:
+ img_cropped = img
+
+ # Resize to final dimensions
+ img_final = img_cropped.resize((target_width, target_height), Image.Resampling.LANCZOS)
+ img_final.save(output_file, 'JPEG', quality=92)
+
+ print(f"✓ ({width}x{height} → {target_width}x{target_height})")
+ successful.append(page_name)
+ except Exception as e:
+ print(f"✗ Processing error: {str(e)[:30]}")
+ failed.append(page_name)
+ else:
+ print(f"✗ Download failed")
+ failed.append(page_name)
+ else:
+ print(f"✗ No image URL in HTML")
+ failed.append(page_name)
+ else:
+ print(f"✗ Failed to fetch page")
+ failed.append(page_name)
+
+ except Exception as e:
+ print(f"✗ Error: {str(e)[:40]}")
+ failed.append(page_name)
+
+ print("\n" + "=" * 60)
+ print(f"Successfully processed: {len(successful)}/{len(flickr_photos)}")
+ if successful:
+ print(f"All Flickr images updated to 3x1 aspect ratio (900x300px)")
+ if failed:
+ print(f"Failed: {len(failed)}")
+
+ return len(failed) == 0
+
+
+if __name__ == '__main__':
+ success = process_flickr_images()
+ exit(0 if success else 1)
diff --git a/docs/_static/conf/images/headers/2026/attendee-guide.jpg b/docs/_static/conf/images/headers/2026/attendee-guide.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..fdfde081a459bd9815f06e1e96191fdd95374f17
GIT binary patch
literal 85784
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%0Df=RYl6|d#8hW#1jQdlmRycZI(nqUaqp4ZJ
z9(f;yZuRSbvdN~-{CuP?G4w5gRc<~FYWC+imO$!uEOyT$XR!HlGhd^+7l-^A;OkiY
zKjB>}*5Yh=lgqRS<6gzOl6|vVwpz}gV#82$w~=k*c4=K#mIoXRa6K!+o_#HOBcM+#
zRdtip@ekQ=_H5BK?*m%+$HbOvG}AZ?lP1!*IOHCO+pTwBwP)=8rD>iBgT{I`kr+!E
z5=q2S^W~loPjg)z-;Mk`;mtDE!d*)KIAppvvf9Q^md?j4aophbuT#^!S7+jFB7Y9S
zZzavG^d+Htz5K*SJ4)vaymcJcJaMhn=aby-ry6vrC|hIm4&rw3+pX=iK3s3aist}>
z?O1x2uMF0c3pPGbJHiw9N$X!<`0MsRx79SgT2%2WUTP8(C4-m(6+L#o0MFLGSJyrZ
z_}{@W&1>Qf8cTC2AqkaPUmx9WIQrMn(yI!Qx;Uqcv*b@kdA_T5PMfk&PUDh$*5`wD
z0}L?CtVdzZbG|5sODM&h%E=;iRv07eTYnB>hWf~fTxKG8uKH&+3AbOA^;W!XQ%>6`
z-N$PSpVf4hTOw{5ZpKaEl5SX*^C2iR5U
zz~ZRcObAfR+O*YFrs0k_rnV5|9fe%eurA`~A2m}#Ggj;fH*x3t!mc}#%$-Y5OG~?p
zx!5shI3JB;ODCTpz`}~Vug^T1mBda-RCWXDRMs+ZiaF_7^(^=Q0NE1G(&NQ9t#gbn
zzz^VS=wFC>&Yz{&%b65_rvkhK_G;7Su+<(#1zpr1t#5o=)^8=dHbI!=xqQ9`gUdC3Lab>ODPVPeGj@r!eRqV?F({64{+pj33@DHs!z`hUEwM}6m7lIhu
zsV201b>Nw_{ZaJeewPI^hEtpo+P0-x(Utlf_=v|92T$!DWpy>2q()EXO_f1TRvgjmPj6^){Vj
zrFaj*@%VbmG+4Boby*1Ge8;ILy?b=>nCCR@DRQN)_t&xcXA}5=E(5PloeCPYu*<4jcRlaAHy(Q%bdr0_}q*?jeFN4J&axwkuENLJ8H5<25%7;
za3i_Temd8aYySWe^+;NV!PUJQWM`HaoR-pYVwIuf}N<
zUN7-o&Y>7TG!UqYHt+LesP?an%y5vwVjVRr$D{6k&BFPvCpyZhV(UgQs^YoheG_W>
zUt4xPufqO1)o!iQ<_|5Q1Pp_c-nHqP2aCkYqDO47#dv0gq)*|SRkW~=ZMa?&`?wtk
zwRHLxxg;~HuplwVUX|xksHH6rUaO0X=G^t0i{QjcSOK1
zMDa$8`#E?z@R!x3OO1X=j!IgCxJG?9kO}q!*1pI1Rq*>p@DGJ_?H5h85Zl?rvBMY`
z`myyj-GiYzs>^wP5&r;#`FfrnHoPg#$?YDU-~12E=*8BX;jJ#~#GW9#iq6u~CYnj6
zY$RwGELi$tzc;=Dr5tLGlBeV`T_vwB>La{6f5K8
zI&^k_1~koP3q`y|yVjh@6f9ZHQ4{Zi*0+<;-`c(fR_4Phgh9{RJFHKRnMVr
zfP4Gb(?Xxssi;$0pEo)EVs3RFhi#`_*xkt_a7!6@4jmATDf$kXt<57tzt`^8+Q!an
ziDWofU_#7(zJuPm{{Y$d;V!wY++6tk#WyWuZ>h67TF3XFCqIB30qiU4T@Jzx0@Lie
zO}be}j4?xpfA^cIuc^y&N!N<0TSfS@@ZLD_dj*kImJ2Li*0OCk_G0^A?LQ@=@6h11
z-+~@JMckJfZk*lYxw