# 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.