Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8c6e807653 | ||
|
|
0725d3eb1a | ||
|
|
bb8fd62041 | ||
|
|
1745ea9e93 | ||
|
|
2f1bb6deb5 | ||
|
|
40d5b54055 | ||
|
|
e2934f84b8 | ||
|
|
a4069d27e4 | ||
|
|
b33a72ced0 | ||
|
|
dde33d0907 | ||
|
|
fbf3dbe33e | ||
|
|
21785ed493 |
@@ -6,7 +6,7 @@ This is the static website for Protospace, a non-profit makerspace in Calgary, A
|
|||||||
|
|
||||||
## Source of truth
|
## Source of truth
|
||||||
|
|
||||||
- Edit the HTML, CSS, and metadata files directly.
|
- Edit the HTML, CSS, and metadata files directly under `public/`.
|
||||||
- Do not create or reintroduce a static-site generator.
|
- Do not create or reintroduce a static-site generator.
|
||||||
- Do not add a build script that overwrites manually maintained pages.
|
- Do not add a build script that overwrites manually maintained pages.
|
||||||
- There is intentionally no `build.js` or equivalent generator.
|
- There is intentionally no `build.js` or equivalent generator.
|
||||||
@@ -14,7 +14,7 @@ This is the static website for Protospace, a non-profit makerspace in Calgary, A
|
|||||||
|
|
||||||
## Page structure
|
## Page structure
|
||||||
|
|
||||||
- Every page must be an `index.html` inside its own route directory:
|
- Every page must be an `index.html` inside its own route directory under `public/`:
|
||||||
- `/index.html`
|
- `/index.html`
|
||||||
- `/the-space/index.html`
|
- `/the-space/index.html`
|
||||||
- `/tools/index.html`
|
- `/tools/index.html`
|
||||||
@@ -81,15 +81,9 @@ Keep the current open-house information consistent:
|
|||||||
|
|
||||||
If this information changes, update the sidebar, relevant page copy, JSON-LD, and `llms.txt` together.
|
If this information changes, update the sidebar, relevant page copy, JSON-LD, and `llms.txt` together.
|
||||||
|
|
||||||
## Stylesheet cache versioning
|
|
||||||
|
|
||||||
- Every HTML page references `styles.css` with a cache-busting epoch query parameter, such as `/styles.css?v=1790211252`.
|
|
||||||
- Whenever `styles.css` changes, update the `?v=` value in every HTML page to the current Unix epoch timestamp.
|
|
||||||
- Keep the preload and stylesheet URLs synchronized so both use the same version.
|
|
||||||
|
|
||||||
## Assets
|
## Assets
|
||||||
|
|
||||||
- Store local images in `/assets/`.
|
- Store local images in `public/assets/`.
|
||||||
- Use descriptive filenames rather than WordPress upload names such as `photo_6_2023-06-06_16-39-08.jpg`.
|
- Use descriptive filenames rather than WordPress upload names such as `photo_6_2023-06-06_16-39-08.jpg`.
|
||||||
- Remove unused downloaded image variants when it is safe to do so.
|
- Remove unused downloaded image variants when it is safe to do so.
|
||||||
- Update every reference when renaming or removing an asset.
|
- Update every reference when renaming or removing an asset.
|
||||||
@@ -177,6 +171,7 @@ Before finishing an HTML change:
|
|||||||
- Run structural validation when available, for example:
|
- Run structural validation when available, for example:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
cd public/
|
||||||
npx html-validate \
|
npx html-validate \
|
||||||
--rule doctype-style:off \
|
--rule doctype-style:off \
|
||||||
--rule void-style:off \
|
--rule void-style:off \
|
||||||
@@ -190,6 +185,7 @@ Before finishing an HTML change:
|
|||||||
- Start a local static server and smoke-test every route:
|
- Start a local static server and smoke-test every route:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
cd public/
|
||||||
python3 -m http.server 8765
|
python3 -m http.server 8765
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -19,9 +19,10 @@ The Protospace WordPress site has been replaced with static HTML and CSS pages.
|
|||||||
git checkout -b update-page
|
git checkout -b update-page
|
||||||
```
|
```
|
||||||
|
|
||||||
4. Edit the HTML pages, `styles.css`, or files in `assets/`. Preview the site locally with any static web server, for example:
|
4. Edit the HTML pages, `public/styles.css`, or files in `public/assets/`. Preview the site locally from the public directory with any static web server, for example:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
cd public/
|
||||||
python3 -m http.server
|
python3 -m http.server
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 164 KiB |
|
Before Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 265 KiB |
|
Before Width: | Height: | Size: 187 KiB |
|
Before Width: | Height: | Size: 146 KiB |
|
Before Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 249 KiB |
|
Before Width: | Height: | Size: 184 KiB |
|
Before Width: | Height: | Size: 167 KiB |
|
Before Width: | Height: | Size: 120 KiB |
|
Before Width: | Height: | Size: 289 KiB |
|
Before Width: | Height: | Size: 231 KiB |
|
Before Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 92 KiB |
|
Before Width: | Height: | Size: 227 KiB |
|
Before Width: | Height: | Size: 152 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 135 KiB |
|
Before Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 213 KiB |
|
Before Width: | Height: | Size: 137 KiB |
|
Before Width: | Height: | Size: 208 KiB |
|
Before Width: | Height: | Size: 140 KiB |
|
Before Width: | Height: | Size: 308 KiB |
|
Before Width: | Height: | Size: 232 KiB |
|
Before Width: | Height: | Size: 144 KiB |
|
Before Width: | Height: | Size: 92 KiB |
|
Before Width: | Height: | Size: 231 KiB |
|
Before Width: | Height: | Size: 153 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 167 KiB |
|
Before Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 256 KiB |
|
Before Width: | Height: | Size: 179 KiB |
|
Before Width: | Height: | Size: 136 KiB |
|
Before Width: | Height: | Size: 92 KiB |
|
Before Width: | Height: | Size: 225 KiB |
|
Before Width: | Height: | Size: 162 KiB |
|
Before Width: | Height: | Size: 187 KiB |
|
Before Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 275 KiB |
|
Before Width: | Height: | Size: 197 KiB |
|
Before Width: | Height: | Size: 182 KiB |
|
Before Width: | Height: | Size: 137 KiB |
|
Before Width: | Height: | Size: 307 KiB |
|
Before Width: | Height: | Size: 249 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 230 KiB |
|
Before Width: | Height: | Size: 159 KiB |
|
Before Width: | Height: | Size: 148 KiB |
|
Before Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 227 KiB |
|
Before Width: | Height: | Size: 160 KiB |
|
Before Width: | Height: | Size: 124 KiB |
|
Before Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 194 KiB |
|
Before Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 151 KiB |
|
Before Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 163 KiB |
|
Before Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 275 KiB |
|
Before Width: | Height: | Size: 211 KiB |
@@ -21,8 +21,9 @@ WIKI_URL = "https://wiki.protospace.ca/Tools_we_have"
|
|||||||
WIKI_ROOT = "https://wiki.protospace.ca"
|
WIKI_ROOT = "https://wiki.protospace.ca"
|
||||||
COOKIE = "human_check=verified"
|
COOKIE = "human_check=verified"
|
||||||
ROOT = Path(__file__).resolve().parent
|
ROOT = Path(__file__).resolve().parent
|
||||||
OUTPUT = ROOT / "tools.json"
|
PUBLIC_ROOT = ROOT / "public"
|
||||||
IMAGE_DIR = ROOT / "assets" / "tools"
|
OUTPUT = PUBLIC_ROOT / "tools.json"
|
||||||
|
IMAGE_DIR = PUBLIC_ROOT / "assets" / "tools"
|
||||||
|
|
||||||
|
|
||||||
class ToolsParser(HTMLParser):
|
class ToolsParser(HTMLParser):
|
||||||
|
|||||||
@@ -11,12 +11,12 @@
|
|||||||
<meta property="og:description" content="Explore Protospace’s 3D printer village in Calgary, with filament and resin printers available to trained members." />
|
<meta property="og:description" content="Explore Protospace’s 3D printer village in Calgary, with filament and resin printers available to trained members." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://protospace.ca/3d-printers/" />
|
<meta property="og:url" content="https://protospace.ca/3d-printers/" />
|
||||||
<meta property="og:image" content="https://protospace.ca/assets/3d-printers-1-1024x768.jpg" />
|
<meta property="og:image" content="https://protospace.ca/assets/3d-printers-1-800.jpg" />
|
||||||
<meta property="og:site_name" content="Protospace" />
|
<meta property="og:site_name" content="Protospace" />
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
<meta name="twitter:card" content="summary_large_image" />
|
||||||
<title>3D Printers – Protospace</title>
|
<title>3D Printers – Protospace</title>
|
||||||
<link rel="preload" href="/styles.css?v=1790211252" as="style" />
|
<link rel="preload" href="/styles.css" as="style" />
|
||||||
<link rel="stylesheet" href="/styles.css?v=1790211252" />
|
<link rel="stylesheet" href="/styles.css" />
|
||||||
<script type="application/ld+json">
|
<script type="application/ld+json">
|
||||||
{
|
{
|
||||||
"@context": "https://schema.org",
|
"@context": "https://schema.org",
|
||||||
@@ -84,26 +84,24 @@
|
|||||||
<div class="entry">
|
<div class="entry">
|
||||||
<figure>
|
<figure>
|
||||||
<picture>
|
<picture>
|
||||||
<source type="image/webp" srcset="/assets/3d-printers-1-1024x768.webp 1024w, /assets/3d-printers-1.webp 1280w" sizes="(max-width: 760px) calc(100vw - 24px), 750px" />
|
<source type="image/webp" srcset="/assets/3d-printers-1-400.webp 400w, /assets/3d-printers-1-800.webp 800w, /assets/3d-printers-1-1600.webp 1600w" sizes="(max-width: 760px) calc(100vw - 24px), 750px" />
|
||||||
<img width="1024" height="768" src="/assets/3d-printers-1-1024x768.jpg" srcset="/assets/3d-printers-1-1024x768.jpg 1024w, /assets/3d-printers-1.jpg 1280w" sizes="(max-width: 760px) calc(100vw - 24px), 750px" alt="3D printer in the printer village" decoding="async" fetchpriority="high" />
|
<img width="800" height="602" src="/assets/3d-printers-1-800.jpg" srcset="/assets/3d-printers-1-400.jpg 400w, /assets/3d-printers-1-800.jpg 800w, /assets/3d-printers-1-1600.jpg 1600w" sizes="(max-width: 760px) calc(100vw - 24px), 750px" alt="Resin 3D printers and printing supplies" fetchpriority="high" decoding="async" />
|
||||||
</picture>
|
</picture>
|
||||||
</figure>
|
</figure>
|
||||||
|
|
||||||
<figure>
|
<figure>
|
||||||
<picture>
|
<picture>
|
||||||
<source type="image/webp" srcset="/assets/3d-printers-2-1024x768.webp 1024w, /assets/3d-printers-2.webp 1280w" sizes="(max-width: 760px) calc(100vw - 24px), 750px" />
|
<source type="image/webp" srcset="/assets/3d-printers-2-400.webp 400w, /assets/3d-printers-2-800.webp 800w, /assets/3d-printers-2-1600.webp 1600w" sizes="(max-width: 760px) calc(100vw - 24px), 750px" />
|
||||||
<img width="1024" height="768" src="/assets/3d-printers-2-1024x768.jpg" srcset="/assets/3d-printers-2-1024x768.jpg 1024w, /assets/3d-printers-2.jpg 1280w" sizes="(max-width: 760px) calc(100vw - 24px), 750px" alt="3D printer equipment" loading="lazy" decoding="async" />
|
<img width="800" height="602" src="/assets/3d-printers-2-800.jpg" srcset="/assets/3d-printers-2-400.jpg 400w, /assets/3d-printers-2-800.jpg 800w, /assets/3d-printers-2-1600.jpg 1600w" sizes="(max-width: 760px) calc(100vw - 24px), 750px" alt="3D printer village with filament and resin printers" loading="lazy" decoding="async" />
|
||||||
</picture>
|
</picture>
|
||||||
</figure>
|
</figure>
|
||||||
|
|
||||||
<figure>
|
<figure>
|
||||||
<picture>
|
<picture>
|
||||||
<source type="image/webp" srcset="/assets/3d-printers-3-1024x768.webp 1024w, /assets/3d-printers-3.webp 1280w" sizes="(max-width: 760px) calc(100vw - 24px), 750px" />
|
<source type="image/webp" srcset="/assets/3d-printers-3-400.webp 400w, /assets/3d-printers-3-800.webp 800w, /assets/3d-printers-3-1600.webp 1600w" sizes="(max-width: 760px) calc(100vw - 24px), 750px" />
|
||||||
<img width="1024" height="768" src="/assets/3d-printers-3-1024x768.jpg" srcset="/assets/3d-printers-3-1024x768.jpg 1024w, /assets/3d-printers-3.jpg 1280w" sizes="(max-width: 760px) calc(100vw - 24px), 750px" alt="3D printer in operation" loading="lazy" decoding="async" />
|
<img width="800" height="602" src="/assets/3d-printers-3-800.jpg" srcset="/assets/3d-printers-3-400.jpg 400w, /assets/3d-printers-3-800.jpg 800w, /assets/3d-printers-3-1600.jpg 1600w" sizes="(max-width: 760px) calc(100vw - 24px), 750px" alt="Desktop 3D printers and print supplies" loading="lazy" decoding="async" />
|
||||||
</picture>
|
</picture>
|
||||||
</figure>
|
</figure>
|
||||||
|
|
||||||
<p></p>
|
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
<aside class="sidebar">
|
<aside class="sidebar">
|
||||||
@@ -133,10 +131,10 @@
|
|||||||
<div class="footer-inner">
|
<div class="footer-inner">
|
||||||
<div class="footer-links">
|
<div class="footer-links">
|
||||||
<div><a href="https://www.youtube.com/user/calgaryprotospace/playlists" class="external">YouTube</a></div>
|
<div><a href="https://www.youtube.com/user/calgaryprotospace/playlists" class="external">YouTube</a></div>
|
||||||
<div><a href="https://wiki.protospace.ca/Faq" class="external">F.A.Q.</a></div>
|
<div><a href="https://github.com/Protospace" class="external">GitHub</a></div>
|
||||||
<div><a href="https://www.facebook.com/CalgaryProtospace/" class="external">Facebook</a></div>
|
<div><a href="https://www.facebook.com/CalgaryProtospace/" class="external">Facebook</a></div>
|
||||||
</div>
|
</div>
|
||||||
<p>PROTOSPACE 2026 · All rights reserved</p>
|
<p>© PROTOSPACE 2026 · <a href="https://github.com/Protospace/main-website" class="external">Source Code</a></p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</body>
|
</body>
|
||||||
|
After Width: | Height: | Size: 461 KiB |
|
After Width: | Height: | Size: 265 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 141 KiB |
|
After Width: | Height: | Size: 83 KiB |
|
After Width: | Height: | Size: 439 KiB |
|
After Width: | Height: | Size: 235 KiB |
|
After Width: | Height: | Size: 38 KiB |