The 2026 conference page now supports dynamic ticket phases that you can add, edit, or remove directly in the data file. No code changes needed!
Only one ticket phase is active at a time. The system automatically:
If you have these phases:
On March 1:
Edit the file: /_data/year_2026/homepage.yml
Scroll to the bottom where you’ll find the tickets: section.
tickets:
visibility: true
phases:
- name: Super Early Bird
price: 220
end_date: 2026-02-25T17:00:00Z
ticket_url: https://www.tickettailor.com/...
end_date_display: Ends 25 Feb at 5pm
# Add your new phase here:
- name: Black Friday Sale
price: 250
end_date: 2026-11-29T23:59:00Z
ticket_url: https://www.tickettailor.com/...
end_date_display: Ends 29 Nov at midnight
Just change the values:
- name: Early Bird
price: 280 # Change price
end_date: 2026-07-15T17:00:00Z # Change end date
ticket_url: https://... # Change URL
end_date_display: Ends 15 Jul at 5pm # Change display text
Delete the entire phase block (including the - and all indented lines):
# Delete this entire block:
- name: Flash Sale
price: 300
end_date: 2026-09-30T17:00:00Z
ticket_url: https://...
end_date_display: Ends 30 Sep at midnight
Cut and paste phases to change their order. Important: Phases must be in chronological order (earliest to latest).
| Field | Description | Example |
|---|---|---|
name |
Phase name | Super Early Bird |
price |
Price in pounds (no £ symbol) | 220 |
| Field | Description | Example |
|---|---|---|
end_date |
When this phase ends (ISO 8601 format). Leave as null for final phase. |
2026-02-25T17:00:00Z |
ticket_url |
Full URL to ticket purchase page. Use null for “On the Door” |
https://www.tickettailor.com/... |
end_date_display |
Human-readable end date text. Use null to hide. |
Ends 25 Feb at 5pm |
Use ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ
Examples:
2026-02-25T17:00:00Z = Feb 25, 2026 at 5:00 PM UTC2026-11-06T09:00:00Z = Nov 6, 2026 at 9:00 AM UTC2026-12-31T23:59:00Z = Dec 31, 2026 at 11:59 PM UTCTip: Use UTC timezone (the Z at the end) to avoid timezone confusion.
Insert between existing phases:
- name: Early Bird
price: 280
end_date: 2026-07-01T17:00:00Z
ticket_url: https://...
end_date_display: Ends 1 Jul at 5pm
# NEW: Flash sale for 48 hours
- name: Flash Sale
price: 250
end_date: 2026-09-30T23:59:00Z
ticket_url: https://...
end_date_display: Ends 30 Sep at midnight
- name: Regular
price: 340
end_date: 2026-10-21T17:00:00Z
ticket_url: https://...
end_date_display: Ends 21 Oct at 5pm
Delete the last phase:
- name: Late Bird
price: 395
end_date: 2026-11-06T17:00:00Z
ticket_url: https://...
end_date_display: Ends 6 Nov at 5pm
# Delete "On the Door" phase entirely
- name: Student Discount
price: 180
end_date: 2026-10-01T17:00:00Z
ticket_url: https://www.tickettailor.com/student-tickets
end_date_display: Ends 1 Oct at 5pm (Students only)
To test how the pricing table looks at different dates, edit /_data/dev-settings.yml:
mock_time: "2026-03-01 12:00:00 +0000"
This will show you what visitors see on March 1, 2026.
Remember to remove or comment out mock_time before deploying to production!
To hide the entire tickets section:
tickets:
visibility: false # Change to false
phases:
# ...
⚠️ Order matters - Phases must be in chronological order (earliest first)
⚠️ Last phase - The final phase should have end_date: null and ticket_url: null
⚠️ YAML syntax - Be careful with indentation (use spaces, not tabs)
⚠️ Test before deploying - Use mock_time to verify the logic works correctly
✅ No code changes - Edit data file only
✅ Flexible - Add/remove phases as needed
✅ Automatic - Phases switch based on dates
✅ Reusable - Same system for future years
✅ Simple - Just edit YAML, no programming required
Problem: Phases not showing in correct order
Solution: Make sure phases are listed chronologically (earliest to latest)
Problem: Wrong phase is active
Solution: Check end_date values are correct and in ISO 8601 format
Problem: “Buy” button not appearing
Solution: Verify ticket_url is set and not null
Problem: Entire section not showing
Solution: Check visibility: true is set
To use this system for 2027, 2028, etc.:
/_data/year_2026/homepage.yml to /_data/year_2027/homepage.ymltickets: section with new dates and prices/2026/conf-page-partials/pricing-table-dynamic.html to /2027/conf-page-partials//2027/index.html to include the dynamic pricing tableThe template code doesn’t need changes - just update the data!