Hero art for the ChatGPT claiming post
The post on claiming a business in ChatGPT now has its own hero, a one-line shopfront in a speech bubble, in place of the reused soft-light image. Alt text updated to match.
New work, changes, and fixes to the Loopdash site — newest first.
The post on claiming a business in ChatGPT now has its own hero, a one-line shopfront in a speech bubble, in place of the reused soft-light image. Alt text updated to match.
New guide at /blog/claim-your-business-in-chatgpt walks through OpenAI's Business Hub: the claim, the four verification methods, Persona, and what a business gets after approval.
The MissionML proposal's signing embed now points at a scope-only Documenso document, since MissionML already has a signed MSA with Loopdash. The older signing documents were deleted.
The MissionML proposal page now covers a three-week build with a dedicated page for each of the Discovery, DX, Production, and MLOps studios. Its signing embed points at a new Documenso document with the updated scope.
The MissionML signing embed now points at a Documenso document that includes the Master Service Agreement alongside the website scope. MissionML had no MSA on file, so both are signed together. The scope-only document was deleted.
A new password-gated proposal page at /proposals/mission-ml scopes a 5 to 7 page website for MissionML across discovery, design, development, and launch. Its signing embed points at a new Documenso document.
The shared skills repo was renamed from loopdash/s to loopdash/skills, so the Merge QA webhook workflow now calls the reusable workflow from its new location. CI-only change; no visitor-facing impact.
A new password-gated proposal page offers Kyntronics another 50-hour prepaid support block at $5,500, with the same $110/hour in-block and $125/hour overage rates as the first. Its signing embed points at a new Documenso document. The original block's page is unchanged.
Replaced today's collage hero (its registration lines read as a gun crosshair) with a far simpler illustration: a single continuous one-line padlock over an offset blue shape with a small red scribble, childlike and Picasso-leaning, on cream paper. New filename so cached variants of the earlier art are not served.
The October 2026 security roundup and the 20-minute check shipped this morning with two heroes in the same grainy-landscape style, which read as near-identical in the blog index. The roundup now has a distinct editorial collage hero (hand-drawn browser window, halftone duotone padlock sinking behind a water line, cream paper), with alt text updated to match.
Replaced the reused stock heroes (wool.jpg, soft-light.jpg) on the October 2026 security roundup and the 20-minute security check with purpose-made art in the blog's house style (grainy painterly landscapes, olive/periwinkle/poppy palette), generated with Gemini. Updated the alt text to describe the new images.
Adds a focused service page for nonprofits that need clearer donation asks, easier forms, and better giving flows.
A new Merge QA webhook workflow POSTs to the Grok Bot QA routine whenever a PR merges into main, the same way loopdash/log does. Until now this repo never fired that webhook, so merges like the careers resume upload had to be handed to QA by hand. CI-only, no site change (Log #134, #242).
Published two new posts: "WordPress Security in October 2026: What to Update" (/blog/wordpress-security-october-2026), a roundup of October's core release and exploited plugins, and "A 20-Minute Security Check for Your WordPress Site" (/blog/wordpress-security-checklist), a practical checklist for site owners.
Rewrote the October 2026 security roundup and the 20-minute security check as sourced long-form pieces, with new coverage of the PHP2Shell flaws, UpdraftCentral key abuse, and PHP end of life. Both posts now show their FAQ on the page, matching the FAQ schema.
The Email field on the Design Engineer apply form no longer shows "Please enter a valid email address." while an applicant is still typing. The shared work-with-us email checker now skips the careers form, and the careers form checks its text fields when a field loses focus or on submit, clearing an error as soon as the value becomes valid.
The Design Engineer apply form now asks for a resume file (PDF, DOC, or DOCX, up to 10 MB) instead of a link. It posts to /api/apply, which checks Turnstile and stores the application in a private R2 bucket.
Removed hiring/take-home/ and its changelog entry. The Junior Designer / Project Manager take-home now lives in its own public repo so candidates can fork it, and the grader guide is kept privately.
The retirement benefit on /careers and /careers/design-engineer is now labeled 401(k), so candidates see exactly what the plan is.
Button icons now transition their fill on the same timing as the button's text and background, instead of snapping to the hover color instantly.
New careers page heading and intro ("Join a studio that feels like yours."), with a narrower heading and intro column so the hero no longer sprawls. Removed the border under the last open-role row.
The careers page and the Design Engineer listing no longer list a referral program or a flexible schedule as benefits. The careers FAQ answer on remote work drops the "no set hours" line to match.
The ci-fail job passed github.run_id (a string) into the reusable workflow's number input, so GitHub silently dropped the job on every failed PR run. It now passes fromJSON(github.run_id). CI-only, no site change (Log #168).
The /intro referral page now uses the site's current type and components in one narrow centered column. The dark payout band, serif headings, timeline cards, and collapsed FAQ accordion are gone. The FAQs show their answers inline, and the hero and payout copy are shorter.
Adds a practical guide to testing an MVP's riskiest workflow before expanding its feature set.
The services page drops the two-column grid and the "Services" heading for a single column: a large statement in the dark hero, then stacked service rows under small category labels.
Wires the proposal's sign page to its Documenso document so the signing embed loads, and removes the summary under the lead line. The document offers both options: a $3,500/month 12-month retainer or a $23,000 flat rate, neither with an onboarding fee.
The Design Engineer page no longer invites email applications. Applying happens only through the on-page form.
The Design Engineer apply form now posts to a Cloudflare Pages Function instead of Formspree. Applicants upload a PDF, DOC, or DOCX resume (up to 10 MB), Turnstile checks for bots, the resume and application are stored in a private R2 bucket, and Gary gets the details by email with a signed, expiring resume link.
/careers/design-engineer/ now has an apply form (name, email, portfolio, optional LinkedIn, resume link, and a short "why you" note). It posts to the existing Formspree Career Form, the same endpoint the earlier careers apply pages used, and the hero button jumps to it.
The apply form on /careers/design-engineer/ posts to the Formspree Career Form again, with a required resume link field. It had been switched to /api/apply, which returns 503 until the R2 bucket, Turnstile, and secrets are set up. The /api/apply and /api/resume functions and their tests stay in the repo so the upload version can be turned back on later.
The Design Lead (AI-Driven Web) careers page is now Design Engineer at /careers/design-engineer/, with refreshed copy and health insurance added to benefits. /careers/design-lead/ 301s to the new page.
Services index and all 12 service pages rewritten in plainer copy (no taglines, tighter text) with a reworked detail layout: project imagery moves up under the hero, features render as icon cards, and section spacing is evened out.
Maddy Bruster and Elizabeth Willet are removed from the team roster (src/_data/team.json); the about page people list and studio count update automatically.
Rewrites the proposal's description, summary, and service lines so they no longer name the client, its staff, or its domain.
Replaces the proposal's lead line with a single direct sentence and removes the summary underneath it.
Adds the password-protected proposal page at /proposals/united-for-democracy/ with two options for United for Democracy's rebrand and redesign: an all-inclusive $3,500/month retainer (12-month term, no onboarding fee) or a $24,000 fixed project. Documenso signing is not wired yet (empty token) until Gary generates the document.
Three relevant articles now point readers to the nonprofit and campaign website design service.
Removes the Junior Account Lead role page and its listing on /careers/; the Design Lead role stays listed. /careers/junior-account-lead/ now 301s to /careers/ via a Cloudflare Pages _redirects file.
Case studies and blog articles can now carry a "Listen to this article" player with play/pause, seek and speed controls. Audio is generated with ElevenLabs by npm run generate:audio (a manual step, see docs/audio-narration.md) and committed as static MP3s; a page shows the player only once it has audio.
Pinned .nvmrc from 22 to 22.23.4, the patched 22.x release from the October 21, 2026 Node.js security release. Cloudflare Pages builds and local dev now use that exact version. No visitor-facing changes.
Bumped the pinned Node version from EOL 20.18.1 to 22.23.4 for the October 2026 Node.js security release (Brotli decoder RCE, TLS hostname-verification bypasses). No visitor-facing changes; maintainers should nvm install to pick up the new version.
Adds the password-protected proposal page at /proposals/navigator-research-retainer/ for Navigator Research Group Inc's all-inclusive website retainer renewal ($3,000/month, hosting included, no onboarding fee, Nov 1, 2026 to Oct 31, 2027). Documenso signing is not wired yet (empty token) until Gary generates the document.
Adds a Design Lead (AI-Driven Web) role page at /careers/design-lead/ and lists it on /careers/ above the Junior Account Lead role. Applications go to [email protected] by email.
The Sports.Cars tile on the homepage now uses the blue Lamborghini photo. It still fills the whole tile on every screen size.
The Sports.Cars tile on the homepage now uses the Bugatti Chiron over Monaco photo. The image fills the whole tile on phone and tablet instead of showing empty bars around it, and phones frame the front of the car. Homepage feature images now load a size that matches the full-width row, so they stay sharp on desktop.
The Sports.Cars feature on the homepage now uses the yellow Corvette ZR1 photo instead of the Porsche 911 shot, where the cabin looked empty. The mobile and tablet crop is unchanged, and the desktop overlay is a little darker so the title stays readable over the yellow.
On phones and tablets the Sports.Cars homepage tile now shows the whole car instead of a tight crop. It still fills the tile with no bars.
On phones and tablets the Sports.Cars homepage tile is now the same height as the other project tiles. The photo still fills the tile with no bars and keeps the front of the car in view.
CI fail alerts now include failed job and step names, a log tail per failed job, and an infra/code hint.
CI fail alerts now come from an inline job in the CI workflow instead of a separate workflow_run caller file.
When CI fails on a non-draft PR, a thin caller POSTs the run details to the Grok CI fail webhook so the branch gets fixed. Refs https://log.loopdash.com/tasks/168
Adds a Junior Account Lead role page at /careers/junior-account-lead/ and lists it on /careers/, replacing the "no open positions" note. Applications go to [email protected] by email.
CI-only tweak. The Changelog entry job reads the PR file list from the GitHub API instead of cloning the full repo history, cutting the job from up to 2.5 minutes to a few seconds.
New project page for Sports.Cars: live captures from sports.cars in phone and browser frames, wordmark highlights over the site's photography, listing-card and journal-standards chips, and the brand's near-black/red palette. Featured on the homepage and the web development service page.
The Sports.Cars wordmark now runs full width and sits lower on the page, away from the hero logo. Three full-bleed browser stages became contained screenshots so the page alternates between full-width and contained moments. The marks slideshow also centers its wordmark correctly, which fixes a 48px offset on Sports.Cars and Durkovic.
The Sports.Cars feature image on the homepage now shows the whole car on mobile and tablet instead of a thin cropped slice. Desktop is unchanged.
Adds the Documenso SOW signing token for Alexandria Contreras to /proposals/pbf-pacifica-partnerships/ and enables the Review proposal button, so the client can review and sign the Scope of Work from the proposal page.
Adds the password-protected proposal page at /proposals/pbf-pacifica-partnerships/ for a Partnerships page and workshop materials library on pacresourcecenter.org. Fixed price $4,000, all up front. Documenso signing is not wired yet (empty token; Review button disabled until Gary generates the document).
GitHub Actions CI now only runs the changelog PR check. Cloudflare Pages remains the build and deploy. test/, lighthouserc.json, and npm run test:ci stay for local use.
CI now runs build:css and build:vite concurrently in the Build & test and Lighthouse jobs via GitHub Actions parallel steps, then Eleventy (and tests / Lighthouse) after both finish. Local npm run build / test:ci and the Cloudflare Pages command stay sequential.
Same-day A/B measured sequential split CSS/Vite steps against #165 parallel. After recording timings, this branch restores parallel:. Do not merge — main already has the parallel workflow.
Changelog-exempt: copy update to a proposal page. Details omitted per this folder's policy of not publishing client quotes, pricing, or proposal pages.
Enables the Documenso signing embed on /proposals/asp-web-launch/ and turns on the Review proposal button now that a live token exists.
Changelog-exempt: copy update to a proposal page. Details omitted per this folder's policy of not publishing client quotes, pricing, or proposal pages.
Adds the password-protected proposal page at /proposals/moms-first-retainer/ for the Moms First WordPress and Host Hub retainer renewal ($3,750/month, Oct 9, 2026 – Oct 8, 2027). The Review proposal link uses the live Documenso token.
Changelog-exempt: copy update to a proposal page. Details omitted per this folder's policy of not publishing client quotes, pricing, or proposal pages.
Shortens the public intro on two proposal pages and drops dollar amounts from the description and summary area. Details omitted per this folder's policy of not publishing client quotes, pricing, or proposal pages.
Adds the password-protected proposal page at /proposals/asp-web-launch/ for the American Service Project web-launch punch list ($2,000 fixed). The Documenso signing embed is omitted until a live token exists.
Eight relevant blog articles now point readers to Loopdash's AI automation and automated content services.
Moves the Hepner Filter proposal to /proposals/hepner-filter/ (old slug removed), sets the live Documenso signing token, and updates the timeline to 7 weeks (1 week email, 2 weeks QuickBooks import, 4 weeks service portal).
Updates the CODISCOVR proposal page so it describes a similar scope to the NSS engagement, not an identical build, and points the sign embed at the refreshed Documenso token.
Adds the password-protected proposal page at /proposals/codiscovr-website-revamp/ for the Cozen O'Connor CODISCOVR WordPress rebuild, with the live Documenso signing embed at /proposals/codiscovr-website-revamp/sign/.
Published a new post, "What Is a Slop Grenade?" (/blog/what-is-a-slop-grenade), defining the term and how teams stop passing unchecked AI output downstream.
Rewrote "How to Get Your Content Cited by ChatGPT and Other AI" in Gary's voice: cut em dashes, clichés, and machine-sounding phrasing throughout. Also lands two fixes that missed the original merge: the practice section now describes our method instead of an invented client case study, and the robots.txt aside is plain prose instead of a blockquote.
Added a new blog post, "How to Get Your Content Cited by ChatGPT and Other AI" (/blog/how-to-get-cited-by-ai), a sourced guide to AEO/GEO with a client case study, plus its header image. Fixed blog-card images rendering off-center everywhere cards appear — the HTML height attribute was overriding the CSS aspect ratio, showing only the top slice of each image. Renamed the related-posts heading on blog posts from "Don't miss these" to "More thinking."
Updates the CEO letter proposal to the single $9,000 package with print-ready letters and a public archive. Signer is Zamaan Qureshi.
Blog posts now use a centered editorial layout — category eyebrow, large centered title, dek, and author block over a wide rounded hero image — with a sticky vertical share rail beside a narrow reading column and a "Don't miss these" related-posts section.
Fifteen relevant blog passages now point readers to Loopdash's integration, reporting, and creative strategy services.
Replaces the two-option CEO letter proposal with the single mid-October scope from the Aug 31 call. Signer is Zamaan Qureshi.
Flips Novak Insurance to listed: true so it appears on the work index and sitemap and is eligible to lead the homepage. Updates the curated home feature list — drops the non-matching gain slug, adds Novak Insurance and Accountable Tech — so the homepage now leads with The Durkovic Group, National Subrogation, Novak Insurance, Accountable Tech, and Courier.
Deletes the redirect rules that 301'd /projects/novak-insurance to /projects/. They were left over from when the case study was hidden and were bouncing visitors away from the now-live page before it could render, so the case study and its images never loaded.
Updates the existing Courier midterm event-series proposal page to a new draft. Details omitted per this folder’s policy of not publishing client quotes, pricing, or proposal pages.
Adds the password-protected proposal page at /proposals/courier-midterm-event-series/ for Courier Newsroom’s midterm event series site, with the live Documenso signing embed at /proposals/courier-midterm-event-series/sign/.
Rewrites the proposal page in plain voice and names the hosting choice: couriernewsroom.com or a subdomain. Details omitted per this folder’s policy of not publishing client quotes, pricing, or proposal pages.
Updates the visible title on the existing Courier midterm proposal page to National and State Midterm Event Pages. Details omitted per this folder’s policy of not publishing client quotes, pricing, or proposal pages.
Updates the public proposal summary line and signing document. Details omitted per this folder’s policy of not publishing client quotes, pricing, or proposal pages.
Changelog-exempt: proposal page update. Details omitted per this folder's policy of not publishing client quotes, pricing, or proposal pages.
Drops dollar amounts from the public proposal page copy. The page now leads with two high-level options. Pricing stays in the signed SOW.
Changelog-exempt: copy update to a proposal page. Details omitted per this folder's policy of not publishing client quotes, pricing, or proposal pages.
Cinematic case studies paint stage backgrounds from that project's palette (navy / deep), not Loopdash ivory. Novak's first two stages now use #12345c and #0b2444. The case-study recipe requires sampling those colors from the live site.
Adds a National Subrogation case study in the cinematic capture format — live phone and desktop shots of the WordPress site Loopdash developed from Have Substance's Figma, with chips for services, recovery stats, and Subroforce. The homepage row is a rust field (#94472D → #A75534) with vector 3D bars and the site grid, not a raster crop. Novak Insurance stays in the repo with listed: false, so it is off the homepage, work index, and sitemap until that flag is flipped.
Adds a Durkovic Group case study in the cinematic capture format. Brand identity, design, and WordPress. Copy covers the real process: leaving the partnership, Figma logo rounds, the brand book, and a listing template they fill themselves. Homepage feature and opening still are the Kings Road courtyard. Identity row is 50/50 with a wordmark cycling ink, olive, and stone. The scrolling phone field under it is olive. Listing stills from Summit, Kinneloa, and Kings Road crossfade in one full-bleed band.
Case studies can now be built from live URLs: a Playwright script captures the real site into phone and desktop shots and stages those shots in overlapping frames (with HTML UI chips still on top). Novak uses the WP Engine staging site as the source. Phone fields are a full-bleed rectangular grid: three columns of spaced phones on desktop, cropped by the stage, cycling distinct screenshots as they repeat. The columns move with the page scroll — middle up, sides down — and loop so they never reverse. Phones never overlap. Device corners stay modest (not pills), especially on small screens.
Adds .agents/case-study/ so a live URL (or an edit to an existing case study) follows the Novak page structure and frozen stage rules instead of starting from scratch.
Phone-and-chip stages grow with their frames instead of cutting off at 88vh on wide monitors. The collage itself stays capped so it doesn't balloon on ultrawide. The Novak case study now links to novakinsurance.com.
Courier and GAIN keep their contained art on a brand field, but they now drift on scroll the same way Novak and Navigator do.
Adds a Novak Insurance case study built from live captures of the staging site — phone fields, a desktop homepage in a browser chrome, and HTML chips for coverage and offices. Novak also leads the homepage selected-work list.
The coverage collage and the later phone field sit on the page ivory instead of mist and navy bands. The field fades at the top and bottom so the phones don't clip hard.
Added a Cloudflare Pages Function (functions/proposals/_middleware.js) that enforces the proposal password at the edge, replacing the Eleventy dev-server middleware that today forces the site to run as a paid Node web service on DigitalOcean. With the gate at the edge, the site can deploy as pure static output (_site) on Cloudflare Pages — no origin server, no health-check fragility, ~$0 hosting.
The Function is a faithful port of the .eleventy.js gate: same proposal_access_granted cookie, same 401 password form, same ?pw= prefill, password from the PROPOSAL_PASSWORD env var (default ShapeTomorrow). Cookie is now also Secure; SameSite=Lax. Covered by test/proposals-gate.test.mjs.
This is additive — the DigitalOcean deploy and its Eleventy middleware are untouched, so nothing changes until the Cloudflare Pages cutover. See the "Cloudflare Pages hosting" section in readme.md for the cutover steps.
On-page images are now served from the assets.loopdash.com CDN (Cloudflare R2) instead of the site origin, enabled by setting CDN_ASSETS_URL in the deploy environment. The full pipeline is live: the build restores existing derivatives from the bucket so eleventy only re-encodes images whose source bytes changed (fast deploys), uploads are incremental (only new/changed files, scoped to the img/ prefix, never deleting), and the build rewrites /img/... references to the CDN. Origin image copies remain as a fallback, and OG/social images (Cloudinary) are unaffected.
Adds the password-protected proposal page at /proposals/design-it-for-us-ceo-letter/ for the CEO letter-writing flow on designitforus.org, with the live Documenso signing embed at /proposals/design-it-for-us-ceo-letter/sign/.
Deploys no longer re-encode every image from scratch. scripts/restore-images.mjs runs before eleventy and restores the previously-built derivatives from the assets bucket into _site/img, so eleventy-img skips re-encoding anything that hasn't changed (a full build with derivatives present takes ~2s vs minutes). Only images whose source bytes changed are re-encoded — tracked by a small source-hash manifest (image-source-hashes.json) on the bucket, published by the upload step after a successful upload. Restore is best-effort: with no creds or an empty bucket it does nothing and eleventy generates images as before.
npm run upload now runs scripts/upload-assets.mjs, which walks the built _site/img tree recursively and uploads each file to the assets.loopdash.com bucket only when it is new or its bytes changed (local MD5 vs remote ETag). Unchanged files are skipped, so a deploy no longer re-pushes whole directories that didn't change. The script reads only ASSETS_* env vars, is scoped to the img/ prefix, and never deletes — it cannot touch the cdn.loopdash.com bucket or any client assets.
The Kyntronics proposal now offers a 50-hour support block at $5,500 prepaid instead of 100 hours at $11,000, and its signing embed points at the new Documenso document. Hourly rates, hosting, and scheduling terms are unchanged.
Production builds can now serve all on-page images from the assets.loopdash.com CDN. A post-build step (scripts/rewrite-cdn-urls.mjs, chained into npm run build) rewrites /img/... references in the built HTML, CSS, and JS — including relative favicon paths and CSS url() backgrounds — to the CDN base, and a preconnect is emitted to warm the connection for LCP.
It's off by default and inert until CDN_ASSETS_URL is set in the deploy environment (e.g. https://assets.loopdash.com); local dev and CI are unaffected. Origin image copies remain in the build, so any reference the rewrite misses still resolves — no 404s. Social/OG images are unchanged (Cloudinary).
Production npm start no longer rebuilds the full site before listening — it serves the prebuilt _site output immediately (Eleventy --ignore-initial) so DigitalOcean health checks pass. Local development moves to npm run dev.
Courier's case-study hero now uses the transparent "Cover-Up" cutout on the brand yellow field at Navigator's ~1.43:1 ratio, capped at 800px and centered; the homepage Courier image is likewise capped at 700px. The homepage statement's single "Slack" mention is now an auto-cycling vertical carousel of the tools we work inside (Slack, Linear, Figma, GitHub). Added five images to the inspiration gallery, ordered newest-first, and scaled the inspiration page heading down from the display size.
Swapped the mobile crop of Courier's homepage featured-work image for the full-yellow "The Cover-Up" wordmark composition, so it fills the row cleanly at the same height as the other cards without a device frame, letterboxing, or a clipped wordmark.
Courier and Global AI Youth Network now use a single "subject on a solid brand field" image on the homepage — Courier's "Cover-Up" cutout on brand yellow, GAIN's dithered globe on terminal blue. Each sits on a matching CSS background and is contained and centered (GAIN scaled down with room around it), so the artwork frames identically at every size instead of a zoomed-in crop, and one asset serves desktop and mobile to keep load down. These rows are static (no parallax drift).
The Lighthouse CI job now writes the evaluated Performance, Accessibility, Best Practices, and SEO scores for each audited page into the GitHub Actions run summary as a color-coded table. Lighthouse already ran on every PR and push to main; this surfaces the numbers so they can be reviewed at a glance. The job stays advisory (non-blocking).
Reworked the homepage featured-work section from two-column image/text rows into full-width image rows with the project name, industry, and tagline overlaid on a soft bottom scrim. Titles sit at 80% white and go fully white on hover, which also reveals a "View case study" cue; removed the blur-on-hover, softened the parallax drift, and dropped the divider borders. Courier's "The Cover-Up" now uses an art-directed square crop on mobile so the wordmark isn't clipped. Also adds the Searchlight Institute website-redesign proposal page and small v3 proposal polish (smaller headline, pill CTA, share icon color).
Standardized the primary call-to-action to "Start a project" across the nav (desktop + mobile), hero, and footer, and removed the divider line above the hero CTA row. Also updated the /proposals gate fallback so the dev/preview server always boots (using the real proposal password when PROPOSAL_PASSWORD isn't set) and cleaned up package.json (dropped bogus fs/path deps, fixed the upload script, pinned Node via engines) and .gitignore (stopped tracking .DS_Store, .cache/, and a stale dist/).
Three relevant guides now point readers to Loopdash's nonprofit web design service.
Adds a practical guide to building a human-reviewed workflow for cleaning supporter data in Action Network.
Replaced the old AR-reminder Terms of Service with general website Terms of Use in Loopdash's voice (Ohio governing law). Both Terms and Privacy now share a compact legal layout — smaller hero, two-column section rows — instead of the oversized page-hero treatment.
Relevant blog and glossary pages now point readers to nonprofit web design, SEO, and managed hosting services.
/careers/./changelog/ page that lists these entries newest-first, so shipped changes are visible on the site.h2 (the hero h1 previously jumped straight to h3).maximum-scale=1 from the viewport meta so visitors can pinch-zoom.Relevant guides now point readers to Loopdash web development, copywriting, and branding services.
The About page gains a scroll-pinned "Intelligent ___" word reel over a filtered, heavily-compressed nature backdrop, plus a rewritten Purpose statement that reveals word-by-word on scroll. The studio identity is renamed to Applied Intelligence Studio across home, about, careers, and selected-work (service pages keep "embedded web team"). Also: the homepage proof stat becomes "17 organizations" (was "12 case studies"), the service-page projects grid balances orphan last rows so they fill the width, the Cloudinary OG image drops the logo for a heading on a solid color field, the projects page loses redundant hero/index labels, and form inputs get a faint translucent-white fill.
The About scroll reel's backdrop (about-reel-bg.jpg) was referenced from CSS but sat at the src/img/ top level, which Eleventy does not pass through (only specific src/img/* subfolders are copied), so it 404'd in real builds. Moved it into the passthrough'd src/img/raw/ and updated the CSS path. Added a test/css-assets.test.mjs test that fails on any unresolved url() reference in the built CSS, closing the gap the HTML-only link test left open.
<noscript> fallback and safety timeout so text can never stay hidden).Organization (founding date, slogan, knowsAbout, contactPoint) and Article dateModified — on top of existing Organization/WebSite/Article/FAQPage/Service/Breadcrumb coverage.#035fd0; lighter #3986e6 on dark sections; white text on accent-filled button hovers.backdrop-filter was trapping the navbar z-index, hiding the logo + close button under the open overlay./about-2 comparison page; Forge Health from the testimonial rotation.Social/preview images are now clean text cards in the site palette — the page heading as large type (steps down for longer headings) with the logo as a small brand mark, no stock computer.png. Conversion pages (home, services, contact, work-with-us) render as blue background / cream text; content pages render as cream background / charcoal text. The image is computed once in head.njk and shared by the OpenGraph tags and the Article schema.