# Quartz Setup Checklist
Back to [[Obsidian/Self-Hosting with Quartz/Self-Hosting with Quartz|Self-Hosting with Quartz]].
**(Marshall)** marks steps only you can do: logins, DSM admin, the router, and choices. **(Obsidian Author)** marks steps I can do on Enceladus once you say go.
## 1. Decide
- [ ] (Marshall) Pick the test hostname, for example `notes.jmarshallpittman.org`, and later the final one.
- [ ] (Marshall) Pick the route: Cloudflare Tunnel (recommended) or DDNS with port forwarding.
- [ ] (Marshall) Tell me your DSM version (Control Panel > Info Center) and NAS model.
- [ ] (Marshall) Decide if the first Quartz site covers everything published or only one area, such as Video Summaries.
## 2. Domain / DNS
- [x] (Obsidian Author) Check the current DNS. On 2026-10-22, `.net` and `.org` used Cloudflare nameservers and `.com` used Vercel DNS.
- [ ] (Marshall) Sign in to Cloudflare and confirm that `jmarshallpittman.org` (or `.net`) is listed under your account and shows **Active**.
- [ ] (Marshall) *Only if you want `cv.jmarshallpittman.com` on the NAS:* add `jmarshallpittman.com` to Cloudflare, copy over the Vercel DNS records, and switch the nameservers at your registrar. Plan this separately, because it touches the Digital Garden site.
- [ ] (Marshall) *DDNS route only:* check for CGNAT by comparing the router's WAN IP with https://ifconfig.me.
## 3. Synology (see [[Obsidian/Self-Hosting with Quartz/Synology Web Hosting|Synology Web Hosting]])
- [ ] (Marshall) Update DSM and packages to the latest versions.
- [ ] (Marshall) Install **Web Station** and **Apache HTTP Server 2.4** from Package Center.
- [ ] (Marshall) Create the folder `web/quartz` (under the `web` share), or a separate shared folder `quartz-site`.
- [ ] (Marshall) Create a local user `quartz-deploy` with read/write on that folder only, no admin rights, and no apps except SMB/File Station.
- [ ] (Marshall) Make sure the `http` group can **read** that folder.
- [ ] (Marshall) In Web Station, create the static website service (Apache 2.4) and its portal.
- [ ] (Marshall) Install **Container Manager**. Tunnel route only.
- [ ] (Marshall) Give me the share path and the `quartz-deploy` credentials. Type them into the Windows credential prompt yourself, not into chat.
## 4. Cloudflare Tunnel (see [[Obsidian/Self-Hosting with Quartz/Cloudflare Tunnel|Cloudflare Tunnel]])
- [ ] (Marshall) In the Cloudflare dashboard, go to Networking > Tunnels > Create a tunnel, name it `synology-web`, and choose **Docker**.
- [ ] (Marshall) Copy the token into the Container Manager project. Don't paste it into chat.
- [ ] (Marshall) Start the `cloudflared` container and confirm the tunnel shows **Healthy**.
- [ ] (Marshall) Add a published application route: hostname `notes.jmarshallpittman.org`, service `http://<NAS-LAN-IP>:<portal port>`.
- [ ] (Obsidian Author) If you sign in to Cloudflare in my browser, I can fill in the route fields and check the settings. You still enter the login and approve.
## 5. Quartz build on Enceladus (see [[Obsidian/Self-Hosting with Quartz/Quartz Build and Deploy|Quartz Build and Deploy]])
- [x] (Obsidian Author) Confirm the prerequisites. Node v24.19.0, npm 11.17.0 and git 2.55 are installed, and Quartz 5 needs Node 22 or later with npm 10.9.2 or later.
- [ ] (Obsidian Author) Clone Quartz 5 into `C:\Users\jmars\quartz-pubprojects` (outside Google Drive), run `npm i`, then `npx quartz create`.
- [ ] (Obsidian Author) Set `pageTitle`, `baseUrl`, `ignorePatterns`, and the theme in `quartz.config.yaml`.
- [ ] (Obsidian Author) Add custom styles to hide leftovers, like `folder-overview` code blocks and "Live view (in Obsidian)" sections, if they show.
## 6. Publishing filter
- [ ] (Obsidian Author) Write `quartz_stage.py`. It copies the notes in the Publish cache, plus every attachment they embed, into `content/`. It skips videos and very large files and logs what it skipped.
- [ ] (Obsidian Author) Make `Home.md` the site's `index.md`.
- [ ] (Marshall) Approve the staging report, which lists counts, total size, skipped files and broken embeds.
## 7. Deploy
- [ ] (Obsidian Author) Build locally and preview it at `http://localhost:8080` for you to review.
- [ ] (Marshall) Review the preview: Home, a hub, a Video Summaries channel, and a few image-heavy notes.
- [ ] (Obsidian Author) Write `quartz_deploy.ps1`, which runs `robocopy public → \\NAS\web\quartz /MIR`, and do a first dry run (`/L`).
- [ ] (Marshall) Approve the first real deploy.
- [ ] (Obsidian Author) Run the deploy and add the `.htaccess` for clean URLs.
## 8. Go-live & test
- [ ] (Marshall) Open `https://notes.jmarshallpittman.org` from your phone on cellular, so it isn't on your home Wi-Fi.
- [ ] (Obsidian Author) Run a link check on the live site and report any 404s, missing images or leftover code blocks.
- [ ] (Marshall) Confirm that DSM (ports 5000/5001) is **not** reachable from outside.
- [ ] (Marshall) Optional: in Cloudflare, turn on SSL/TLS **Always Use HTTPS**.
## 9. Automation
- [ ] (Obsidian Author) Add `stage → build → deploy` to the Sunday routine, after `pubprojects_weblists.py --sync-dg --apply` and the storage check. It skips the deploy if the build fails or the staged note count drops by more than 50%.
- [ ] (Obsidian Author) Add the Quartz site size and the last deploy time to the Sunday report.
- [ ] (Obsidian Author) Once you've picked the final domain, update the hub and Home links that point across sites.
- [ ] (Marshall) Decide later whether to move Video Summaries or the CV to their own hostnames.