Skip to content

Dynamic DOM Declaration

A workshop page whose declared content zone is populated with structural containers by script after load, declared with content.dynamic_dom: true; the translation reflects the static source.

<!DOCTYPE html>
<html lang="en-US">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Workshop: Night Photography in the City</title>
  <link rel="canonical" href="https://catchlightmag.com/workshops/night-photography/">
  <link rel="automated-usage" href="https://openames.org/v0.9">
  <meta name="ames-policy" content="1/1/0/0" data-positions="index/ephemeral/store/train">
  <link rel="alternate" type="text/markdown" href="https://catchlightmag.com/workshops/night-photography.ax.md">
  <link rel="stylesheet" href="/assets/css/site.css">
</head>
<body>
  <header>
    <p>Catchlight | For photographers who think</p>
  </header>

  <article data-ames="article">
    <h1>Workshop: Night Photography in the City</h1>
    <p>One evening on location with a Catchlight contributor, working mixed artificial light without a tripod.</p>
    <div data-ames="session-times"></div>
  </article>

  <footer>
    <p>&copy; 2026 Catchlight Magazine</p>
  </footer>

  <script>
    const panel = document.querySelector('[data-ames="session-times"]');
    fetch('/api/workshops/night-photography/sessions')
      .then(r => r.json())
      .then(sessions => {
        for (const s of sessions) {
          const card = document.createElement('div');
          card.className = 'session-card';
          card.textContent = `${s.date}${s.seatsRemaining} seats remaining`;
          panel.append(card);
        }
      });
  </script>
</body>
</html>
---
ames_version: "0.9"
canonical_url: "https://catchlightmag.com/workshops/night-photography/"
publisher: "Catchlight"
title: "Workshop: Night Photography in the City"
locale: "en-US"

permissions:
  index: 1
  ephemeral: 1
  store: 0
  train: 0

content:
  zone: "article"
  dynamic_dom: true
---

[//]: # (ames:zone header)
Catchlight | For photographers who think

[//]: # (ames:zone article)
# Workshop: Night Photography in the City

One evening on location with a Catchlight contributor, working mixed artificial light without a tripod.

[//]: # (ames:zone session-times)

[//]: # (ames:zone footer)
© 2026 Catchlight Magazine