Sep 21 →
Oct 5
Fillable PDF Creation
Flat forms rebuilt as fillable PDFs
Acrobat · PyMuPDF · Python
Authorization forms that arrive as a flat PDF or a Word file are rebuilt as fillable PDFs so they can be completed on screen instead of printed, written on and scanned back. Every tick box and write-on line in the original document gets a field.
Each form has a signature field, a Clear Form button that asks before wiping entries (and does not print), tab order that follows the page, and embedded fonts so the filled form looks the same in every PDF reader.
Updates
- Sep 21 A card authorization form for a sponsorship filing was built from the Word original.
- Oct 5 A notary card authorization was built from a flat PDF.
Complete
Sep 1–2
Web Page Mockups
Project web page mockups built inside project boards
Figma REST · JavaScript · Miro · SharePoint
Website page mockups moved off Figma and onto each project's Miro board, so a mockup sits with the rest of that project's engineering material. The existing Figma files were read through Figma's REST API, used because Figma's Dev Mode integration is rate-limited on the Starter plan.
The script generates a page in the firm's visual style as a frame. Its grid, type scale and block structure are measured off the live site: a 1728-pixel container on 12 columns, rows that alternate image-left and image-right, and paired images in a row.
The frame is generated with lorem ipsum in the text boxes. A second script reads the real paragraphs from a document widget on the same board and writes them in, so editing the document and re-running the script updates the mockup. It matches each text box by its role and width, which survives a rebuild of the frame. Copy that runs short or long is reported for a person to resolve.
In use
Sep 3
Grade Sync between Timelines
Color grades copied from master timeline
DaVinci Resolve API · Python
A DaVinci master timeline is graded once and its derived cuts take the same grades, for the clips that appear on both timelines.
The script reports which clips the two timelines share, which of those carry a grade on the source, and which are already graded on the destination. --apply performs the copy, and --overwrite replaces a grade that already exists on the destination.
In use
Sep 10
Video Carousel Slide Export
One rendered file per carousel slide, cut from a single timeline
DaVinci Resolve API · Python
A custom script renders one file per carousel slide from a single DaVinci timeline. The timeline holds the whole post, and a single slide can be exported with several clips.
Gaps set the slide boundaries: clips that touch are one slide, and a blank frame starts the next.
In use
Sep 10
Video Post Task Workflow
Video post task workflow built in Visio and Planner
JavaScript · Planner · Power Automate · PowerShell · SharePoint · Visio COM
The video post workflow was drawn as a swimlane workflow in Visio, with one shape per Planner task. Includes drafting, reviewing, approval, color grading and captioning. Every task is created up front and parked unassigned in a Blocked bucket, tracked a row apiece in the Workflow Task Sequence List, and completing one assigns the next to its owner and moves it into the released column.
In use
Sep 15–24
Stair Task Workflow
Stair task workflow built in Visio and Planner
BQE · Graph API · JavaScript · Miro · Planner · Power Automate · PowerShell · SharePoint · Visio COM
Each stair project gets the same set of sequential Planner tasks, released one at a time: all are created up front and parked unassigned, and completing one assigns the next to its owner. Includes load calculation, member design, reports and review at each phase. The steps come from a Visio diagram built from the office standards board in Miro, and each project's tasks are tracked a row apiece in the Workflow Task Sequence List. Each project has its own Planner plan and its own release flow.
Updates
- Sep 15 First live instance seeded on one project, with the Visio page drawn to swimlane conventions.
- Sep 16 Standardized every stair project with FD buckets.
- Sep 16 A finished project's release flow is left on, so a weekly job switches it off once every stair task is complete or BQE shows the project Completed, Inactive or Canceled. It touches only per-project stair flows, and a failed read leaves them all alone.
- Sep 24 Design Assist Staircase Task Planner variant added, drawn as its own Visio page from a Miro frame. The script picks the variant from the plan's buckets, and the duplicate guard and read-back check the variant.
- Sep 24 Stair project-type detection moved to BQE. The repository row arrived late, so the project type written into BQE during setup decides instead; it exists by the time the workflow is seeded.
In use
Sep 22–25
Lunch Coordination Adaptive Cards
Lunch headcounts and orders collected automatically
Dataverse · Graph API · JavaScript · Power Automate · PowerShell · SharePoint · Teams
The Workflows bot sends each invited person an Adaptive Card in Teams carrying their usual order, which they change or decline on the card. Office and employment-status fields were added to the Dataverse employee records, so an accurate invitation list can be determined. SharePoint Lists hold each person's usuals per restaurant and the event itself.
Updates
- Sep 22 Employee records extended with office and employment-status fields, which the invitation list is derived from.
- Sep 23 Invite-and-collect flow built through the Power Automate API.
- Sep 25 A person can change their RSVP from the invitation, and one follow-up goes out on the deadline day.
In use
Jul 30 →
Oct 16
Instagram Post Queue
A SharePoint queue posts to Instagram automatically
ffmpeg · Graph API · Instagram API · JavaScript · OneNote · Python · SharePoint · Teams
A SharePoint queue of planned Instagram posts publishes itself. Each row names a project, a post label and a post type, and points at the image folder. A scheduled run picks up every approved row that is due, uploads the images or video, publishes, and writes the returned post id back to the row.
The captions and the grouping of images into posts are generated by script from the project's web page, and land on the project's OneNote caption page under a heading per post. The publisher reads the caption from there at post time, and a companion script pushes a row of image thumbnails under each heading so a reviewer sees which images belong to which caption.
Images come from the image library, where each web-resolution file is traced back to its high-res source by aspect ratio, verified with ffmpeg SSIM at about 0.997, and re-exported. Verticals go to 4:5 (1440×1800) and horizontals to 5:4 (1800×1440). Photos are center-cropped; technical illustrations are padded with white so a drawing is never cut. GIFs convert to H.264 MP4 at 30fps, looped about three times to clear Instagram's three-second minimum.
Video carousels are assembled through the API: each clip is uploaded as a carousel item, then the set is published as one post. The 4K originals are transcoded with ffmpeg to the feed's spec at near-source quality before upload, and reels post the same way as a single item.
A review page shows every queued post with its images in posting order and its caption before anything publishes, and a Teams card announces each row once it is posted to marketing team members. Unposted rows are re-dated from their slot on each pass. Videos are re-encoded to Instagram's requirements before uploading, and a dry-run mode builds the upload and stops short of publishing.
Updates
- Sep 28 Carousel preparation and a short-clip test added, with video re-encoding before upload.
- Sep 29 Queue view and column formatting built so the queue reads as a schedule.
- Oct 6 A second scheduled task was added for one-off runs alongside the regular cadence.
- Oct 15 The caption generator was built. A project’s social images are grouped into posts and a caption written per post from the project’s web page, appended to OneNote.
- Oct 16 Every photo in the queue is compared with the project’s web page, and the review page outlines the ones still unpublished. The two are different crops, so the comparison aligns the pixels and scores them.
A visualization of this workflow can be seen
here.
In use