Session log — Vodalibrary launch and bulk Vimeo tagging

← All session logs

Session log — Vodalibrary launch and bulk Vimeo tagging

4 May 2026 · Hasmukh with Claude · two large bodies of work in one day. First, bulk tagged the back catalogue of Vodacom videos on the Vimeo account with the vodac tag, in eight progressively larger batches (one of which ran 840 tag operations as a single background pass). Second, built and shipped a live web app at the new vodalibrary subdomain that gates the full vodac-tagged library behind a passwordless magic-link login, with a self-service admin page for Hasmukh to enrol managers.

Brief

1. The brief

HasmukhTag the Vodacom videos on Vimeo with vodac. Then put a private library online for the client managers, with a login. I want to add and remove people myself, no developer needed every time.

The two halves of the day connect: the tag is what tells the new site which videos belong in the client view. Without the tagging, the library would either be empty or would have to be hand-curated by Vimeo URL.

Step 1

2. Bulk tagging the back catalogue

Eight rounds of tagging, growing in size each time as confidence built. The biggest single pass was 840 tag operations running as a background job on the server. The pattern that emerged, and is worth keeping for any future bulk Vimeo work, was: resolve the titles in Hasmukh’s list to Vimeo videos, flag misses and ambiguities, confirm the resolved set with him, then run. When a duplicate title appeared in his list as many times as it appeared on Vimeo, he consistently wanted both/all of them tagged, not one of them.

Total over the day: 1,196 videos newly tagged with vodac. Running total in the account: 1,201. All operations went through /root/scripts/vimeo-fetch.py and Vimeo’s API on the server, so the API token never left the VPS.

Step 2

3. Picking a subdomain

The original idea was library.vodavideos.co.za, but that hostname was already taken: a wildcard CNAME on the root domain was pointing it at TalentLMS. Rather than fight the wildcard, the site went live at vodalibrary.vodavideos.co.za. (The choice was revisited the next day; see the 5 May domain-migration log.)

Step 3

4. Login style C: magic links, no passwords

Three options were on the table. A simple browser popup (basic auth), a full custom login page with usernames and passwords, or email-link login. Login style C, magic links, was the choice: no passwords to set, reset, or store, the manager just types their email and clicks a link. Sessions last 30 days, links are single-use and expire after 15 minutes.

The sender domain is library@vodalibrary.vodavideos.co.za, sent via SendGrid with the subdomain authenticated for DKIM and SPF (Hasmukh had already done that work, which is why deliverability is solid). Reply-to on the magic-link email is Hasmukh’s personal address, so any “the link doesn’t work” replies come straight to him.

Step 4

5. The stack and why MySQL not SQLite

The original plan had been to use SQLite for storage (small, embedded, no separate database to manage). Mid-build the Ondrej PHP PPA went unreachable, the php8.3-sqlite3 package could not be installed, and rather than wait we switched to MySQL, which was already on the box for the PageMotor sites. The schema is small (allowlist, magic links, sessions, access log) so the swap was a clean change of driver, not a rewrite.

Other infrastructure pieces that went up the same afternoon: a dedicated PHP-FPM pool vodalibrary with open_basedir locked to the site tree, an nginx vhost with HTTPS via Let’s Encrypt webroot challenge and HSTS enabled, a daily cron job at 02:00 SAST that refreshes the Vimeo data file, and a new MySQL database vodalibrary_db isolated from the other sites’ databases.

Step 5

6. Self-service admin

The brief said Hasmukh wanted to add and remove managers himself. The site has an admin page where he, signed in as an admin, can enrol new managers by email. The first managers can request a sign-in link the moment they hit the login page, no developer in the loop.

Step 6

7. End-to-end test before close

Hasmukh was added as the first admin, the magic-link email arrived, the link was clicked, the admin view loaded, the library rendered. Closed the session with the green light to start enrolling client managers.

OutcomeA live, branded, passwordless private library, populated by tag, refreshed daily, gated by an allowlist that Hasmukh manages himself.
Step 7

8. Local builders, vodac-only by default

The local builder scripts (_build_vimeo_html.py, _build_vimeo_xlsx.py) were parameterised to accept an optional tag filter. With vodac they emit Vodac Library.html and Vodac Library.xlsx; without arguments they still emit the full library. The launcher in iCloud was renamed to Refresh Vodac Library.command, simplified to build only the vodac files, and the older full-library outputs were moved into Archive.

Going forward

9. Going forward

Hasmukh enrols managers via the admin page when ready. Optional polish for the site: a logo, Vodacom colours, a branded magic-link email, per-person tag filtering. None of those block the live site. The older library.vodavideos.co.za still points at TalentLMS via the wildcard CNAME; that is fine, just noted. DNS for the new subdomain was still partially propagated at close (Cloudflare and Google were still cached on the old wildcard answer to TalentLMS, Quad9 and OpenDNS were correct), should be globally clean within a few hours.