The Systems Log
Most agencies tell you they build good systems. This page is us proving it in public, automatically, every week — pulled straight from our own internal build log and lessons ledger by the same architecture we build for clients. No client names, no prices, nothing invented. Just what actually got built, caught, or fixed.
A dripped course platform's enrollment dialog exposes a date picker for access-start overrides but enforces a hard floor of today's date, silently rejecting any past value — so backdating a learner to collapse all drip gates into the past is not possible through the UI. To demonstrate full course completion in a single session, the correct sequence is to switch the drip schedule to enrollment-date mode, run the learner through, then restore the original schedule, with before-and-after screenshots on the work card to document the temporary state change.
A published course landing page on a major hosted LMS platform goes live the moment the course is published, carrying all unfilled template copy verbatim — including an invented testimonials section with fabricated names and quotes visible to any public visitor. Every template block must be rewritten before publication, the testimonials section deleted entirely via the section toolbar rather than filled with placeholder content, and the URL slug corrected manually because it freezes to the course name at creation time and does not update on rename.
The file-upload path for a Trello card attachment rejects arbitrary local filesystem paths such as home-directory shortcuts but accepts screenshot output written to the process's own temp directory, making it possible to attach admin UI screenshots directly from their capture path without an intermediate copy step. After upload, the attachment display name can be normalized to card-naming conventions with a single PATCH-equivalent API call carrying the updated description field, which returned HTTP 200 across all three attachments in testing.
When an admin account is used to walk through a course on a platform that separates admin and learner roles, completion data never writes to the learner analytics tables — the admin session bypasses the tracking layer entirely, so the Learners tab, quiz attempt counters, and course dashboard all remain at zero regardless of how far through the material the admin progresses. Drip locks are also skipped for admin sessions, making every chapter appear unlocked from day one and masking any schedule misconfiguration. The reliable fix is to enrol a purpose-built test learner through the public signup flow from a signed-out browser and read all evidence from that session, using the admin account only to observe the numbers afterward.
On platforms where a free course enrollment collects only a name and email, the learner is authenticated and enrolled immediately without a password, and the optional password-completion step that follows is not required to access course content. This means a fully signed-out browser can complete enrollment, reach the learner library, and progress through lessons and assessments without any credential ever being set, which is a valid and stable session state for building test evidence. Preserving that browser storage state after enrollment allows the same passwordless learner session to be reused across all subsequent verification steps.
A drip schedule configured to release content on a staggered interval from enrollment date was observed reverting silently to the platform default within the same session, with no error surfaced and no visible indication the change had not persisted. The safe practice is to save the setting, fully reload the settings page, and reopen the schedule dialog to confirm the value before treating the configuration as stable or building any learner-facing evidence on top of it. Switching between schedule types also triggers a recalculation across all existing enrollments, so any learner already in progress should be checked after a schedule change to confirm their content access reflects the new logic.
In Kajabi, module publish status and lesson publish status are tracked independently, so a course can contain eight fully published lessons that remain completely invisible because their parent modules are still set to Draft — and the platform surfaces no warning about this mismatch. The fix is to open each module's dropdown and confirm its badge reads Published separately from the lesson badges, and because that dropdown repositions itself above or below the row depending on screen position, taking a screenshot between opening it and clicking Publish is the only reliable audit trail.
A Kajabi trial account silently suppresses all outbound member email: the post-purchase automation runs, the send event logs, and nothing is delivered, with no error surfaced anywhere in the flow. The platform discloses this only if you navigate to Settings then Email Templates, where a notice reads 'Editing email templates is not available during trial,' and the only way to confirm delivery behavior is to enrol a real external address and watch the inbox directly rather than trusting the automation log.
In Kajabi, the 'Skip account creation page' toggle on an offer is greyed out unless the post-purchase destination is set to Existing Landing Page, and that picker enumerates funnel pages only, making any standalone site page ineligible — which means free buyers are always routed through a password-creation step when the thank-you page lives outside a funnel. The only structural fix is to rebuild the destination page inside a Kajabi funnel so it appears in the picker, or to document the account-creation step as an expected part of the flow before the client sees it in production.
A platform's admin session silently disables its own public checkout, so any automated test run from an authenticated browser hits a hard block before reaching the payment step. The fix is to drive the checkout flow from a separate, signed-out browser context — a headless Chromium instance running in the cloud container satisfies this and simultaneously produces clean, unauthenticated screenshots for verification. Four consecutive enrolments completed without error once the session boundary was respected.
Headless Chromium routed through an agent proxy fails with net::ERR_CONNECTION_RESET on every HTTPS request while curl to the same host succeeds, which points to the TLS handshake rather than the proxy routing. The browser was negotiating Encrypted Client Hello and post-quantum key exchange extensions that the proxy's TLS termination layer refused mid-exchange, visible as a websocket close after 39 bytes received. Launching Chromium with those features disabled and a TLS 1.2 ceiling resolved the reset immediately.
A rich-text field inside an offer configuration form ignores programmatic content injection: setting the value through the editor's API updates both the editor state and the underlying textarea, the save call returns success, but a page reload restores the original text. The same form's plain text inputs save correctly when driven with a native value setter and a synthetic input event, and lesson-level rich-text editors accept the API approach without issue — the offer form is the exception. Reliable persistence required simulating real keystrokes: select the existing content, type the replacement, then reapply the block format to repair any structure the selection destroyed.
When an n8n data table is empty and alwaysOutputData is enabled, the workflow receives one item containing an empty string rather than zero items, which means any dedupe set built from that output will match every incoming record as already seen. The fix is to run the array through a filter that drops falsy values before constructing the key set, so an empty table produces an empty set instead of a poisoned one.
The n8n list-tables operation returns a maximum of ten results by default while still reporting the true total count in a separate field, so a name lookup against a large table collection will incorrectly conclude a table does not exist when it simply fell outside the first page. Before treating a table as missing, the lookup must paginate using take and skip until the full set has been checked, otherwise the workflow will attempt to create a duplicate that already exists among dozens of live tables.
In n8n code nodes, $input and $json resolve to the immediate upstream node in the execution graph, not to whichever earlier node produced the data the developer intended to read, so any branch or intermediate step silently redirects the reference. The reliable fix is to reference the intended source node by name using the $(NodeName).first() pattern, making the data dependency explicit and immune to topology changes; three separate silent failures in one workflow estate traced back to this single assumption.
Curious what architecture like this could do for your business?
Book a Free Call