This is the landing page for www.pycascades.com.
This repo manages content shared between years:
- Code of Conduct
- blog/news
- rss for blog
We think we want to host each year's homepage is under www.pycascades.com/, for example www.pycascades.com/2026.
The site is built with lektor.
For local development, install Lektor, for instance with uv
or pipx
, then run:
$ lektor serve
Lektor will build the site and serve it at localhost:5000. Most local changes trigger an automatic rebuild, but do not trigger your browser to reload. You can edit file contents locally, or by clicking the pencil icon in your browser to reach the admin page.
The site lives on Github Pages and is deployed from main
via Github Actions.
Any new commit to the main
branch (e.g, a push or pr merge) automatically deploys.
If you need to redeploy, for instance if we start dynamically pulling from external
sources in the future, you can also manually deploy via the Github Actions web UI.
Articles using the page
model can include the anchors
attribute
to have a menu bar created with links to each anchor.
The anchors
attribute should be a list of id|Human-readable text
, then your
headings should be defined like below, anchor my-html-id|Sweet Heading Text
<div class="heading-wrapper">
<h3 id="my-html-id">Sweet Heading Text</h3>
<a href="#my-html-id" class="anchor-link">
<span aria-hidden="true" class="fa-solid fa-link anchor-icon"></span>
<span class="hidden">Section titled Sweet Heading Text</span>
</a>
</div>
We're using axe-core to do basic usability testing. Thanks to PyBay for inspiration on this. The way it works is:
- we make a temporary directory (once per pytest invocation)
- we make Lektor build into the temportary directory
- we start up a web server
- we point playwright + axe at our webserver
- we assert that there are zero warnings
This kind of testing is the bare minimum, and we should look for ways to improve, especially if we can engage accessibility specialists and folks who primarily browse the web with screen readers
The uv
way:
- uvx --with-requirements tests/requirements.txt playwright install # this only needs to be done once
- uvx --with-requirements tests/requirements.txt pytest