# Lightning Jar > Design, build, and brand technology studio, independent since 2001. We build websites, web applications, and custom software; publish open, pre-registered LLM research (Barkup Bench); and ship open-source libraries for LLM document editing (barkup, barkdown). Contact: hello@lightningjar.com. All site content is public; the MCP endpoint below serves it to agents in structured form. ## Agents - [MCP endpoint](https://www.lightningjar.com/mcp): public, keyless, read-only Model Context Protocol server (streamable HTTP, stateless) with search and read tools over everything listed here - [MCP manifest](https://www.lightningjar.com/.well-known/mcp.json): discovery metadata for the endpoint - [Agent skills](https://www.lightningjar.com/.well-known/agent-skills/index.json): downloadable SKILL.md packages, starting with how to query Barkup Bench data - [API catalog](https://www.lightningjar.com/.well-known/api-catalog): RFC 9727 linkset of machine-readable endpoints ## Company - [About](https://www.lightningjar.com/about): who we are, what we believe, twenty-five years of history - [Services](https://www.lightningjar.com/services): what we do for clients - [Technologies](https://www.lightningjar.com/technologies): the stack we work in - [Customer Stories](https://www.lightningjar.com/customer-stories): case studies - [Testimonials](https://www.lightningjar.com/testimonials) ## Research - [Barkup Bench](https://www.lightningjar.com/research/barkup-bench): open, pre-registered benchmark series measuring how LLMs read and edit structured document trees — results dashboard, study index, packages - [The Builder's Playbook](https://www.lightningjar.com/research/barkup-bench/playbook): ten measured guidelines for building document-editing apps with LLM agents, with code examples - [Study G: One hidden SDK default, two very different benchmarks](https://www.lightningjar.com/research/barkup-bench/g): The original +33pp multi-turn gap was manufactured by conversation histories that omitted the model's own tool calls (the AI SDK v5→v7 response.messages trap). - [Study H: The crossover, found: above ~300 nodes, only anchored patches hold](https://www.lightningjar.com/research/barkup-bench/h): Whole-tree rewrite becomes frontier-only at scale (gemini-flash: 0/15 at ~1000 nodes; sonnet needs a streaming transport and ten minutes per rewrite). - [Study I/J: The model doesn't need to see the tree: a ~1.5k-token view matches the full 85k-token input](https://www.lightningjar.com/research/barkup-bench/ij): Show only the path to the referenced nodes plus their child lists (everything else collapsed or omitted with a count), and anchored-patch accuracy is statistically unchanged for both models at every size; sonnet on the . - [Study K: Sessions drift unless you re-show the tree; and showing a fresh view every turn is also the cheapest policy](https://www.lightningjar.com/research/barkup-bench/k): Twelve sequential patches against one evolving tree. - [Study L: Finding the node is the expensive part: grounding costs 7–9 points, and navigation is a frontier-only trap](https://www.lightningjar.com/research/barkup-bench/l): Same edits, instructions rewritten without ids ("the image-atom named 'maple-ember'"), every description verified to match exactly one node. - [Study N: Stop walking, start searching: one find_nodes call grounds the edit on both model tiers](https://www.lightningjar.com/research/barkup-bench/n): Same id-free tasks as Study L; the expand tool replaced by a single content-search tool (a few words in, the 5 best keyword matches out, shown in place). - [Study M: The view carries the state, but history still earns its keep](https://www.lightningjar.com/research/barkup-bench/m): If a fresh view arrives every turn, does the model need conversation history at all? No; statelessness confirmed the constant-cost economics (~1.3k input tokens at step 1 and step 12 alike) but failed the accuracy gate:. - [Study O: Printing the position on every node does not rescue stateless sessions](https://www.lightningjar.com/research/barkup-bench/o): Study M's stateless failures were all placement edits, so Study O annotated every view child with its true 1-based position (plus a prompt line mapping ordinals to anchors) and re-ran the 2×2 of history × positions. - [Study P: History was a teacher all along: two canned examples replace the whole conversation](https://www.lightningjar.com/research/barkup-bench/p): If history isn't state (the view carries that) and isn't positional help (Study O), maybe it's worked precedent; and precedent can be faked. - [Study Q: "Change every X inside Y" breaks everything; including the oracle](https://www.lightningjar.com/research/barkup-bench/q): One instruction, 2–32 targets, on the same large trees. - [Study S: 36 edits later, nothing broke; except the cost curve](https://www.lightningjar.com/research/barkup-bench/s): Every prior session study ran 12 edits. - [Study T: The one thing statelessness can't do; and the three note lines that fix it](https://www.lightningjar.com/research/barkup-bench/t): Every prior session study used self-contained requests, so Study T built the missing class: callback steps whose required fact lives only in earlier conversation; a declared codename a later rename must use, and a stand. - [Study U: The view that can't see the answer doesn't fail; it makes something up](https://www.lightningjar.com/research/barkup-bench/u): Focused views assume the instruction carries every value an edit needs. - [Study V: Views carry values, memos carry goals](https://www.lightningjar.com/research/barkup-bench/v): The series' first judge-graded study, run under a pre-registered pairwise protocol: both judges (gpt-5.4 primary, haiku-4.5 sensitivity; neither an editor) first had to pass a 50-pair calibration gate with planted verdi. - [Study W: The agent writes the memo faithfully; even when history makes it redundant](https://www.lightningjar.com/research/barkup-bench/w): Studies T and V validated the memo with oracle extraction: the harness knew what to record. - [Study X: "Undo that" needs an echo, not a transcript](https://www.lightningjar.com/research/barkup-bench/x): The last structurally unmeasured request class: follow-ups that point at the previous edit; "also set that same node's…", "apply the same change to X", "actually, undo that." Anaphora steps ran against skeleton views (a. - [Study Y: The memo survives how people actually talk](https://www.lightningjar.com/research/barkup-bench/y): Every declaration in Studies T, V, and W was announced formulaically ("For later reference: the codename is X"). - [Study Z: The brand pack works; the rule you forgot is the hazard](https://www.lightningjar.com/research/barkup-bench/z): Production doc editors ship a standing context block with every request; company facts, client records, a styleguide; and nobody had measured whether models actually use it. - [Study AA: We tested our own headline and lost: strictness is not a capability gradient](https://www.lightningjar.com/research/barkup-bench/aa): Study Z’s spec-conflict split was an accident with one conflict shape, so Study AA measured it on purpose: three registered conflict kinds (rule vs instruction, an explicit user countermand of a rule, rule vs rule), four. - [Study AC: The model always knew what it couldn’t see](https://www.lightningjar.com/research/barkup-bench/ac): Twenty-eight studies of silent failure (90/90 invented values in U, 144/144 silent guesses in X, 120/120 oblivious polishes in V, zero clarifying questions anywhere) never once OFFERED the model a way out. - [Study AD: The core stack transfers to the tier we actually ship](https://www.lightningjar.com/research/barkup-bench/ad): Studies F through U validated the core editing stack on sonnet-4.5 and gemini-3.5-flash, but the downstream template-editing surface runs claude-opus-4.8, a tier whose benchmark data began at Study W. - [Study AE: Only the frontier knows when a question is the right answer](https://www.lightningjar.com/research/barkup-bench/ae): Study AC left two fears on the record: that the escape hatch would tax clear requests with unnecessary questions, and that an ask might be a dead end. - [Study AF: Saying the goal out loud doesn't make it yours](https://www.lightningjar.com/research/barkup-bench/af): One clause in the shipped session-notes rule had been inferred rather than measured: restate a goal from the memo in your own words before a goal-directed rewrite. - [Study AH: Perfect to the cap. At the cap, the goals die first.](https://www.lightningjar.com/research/barkup-bench/ah): Every study that shipped the session-notes memo measured it at three to six notes; the shipped implementation caps it at twenty, with a normalize step that silently drops the excess. - [Study AI: The obvious fix, measured: it helps exactly where we don't ship](https://www.lightningjar.com/research/barkup-bench/ai): Study AE left an obvious fix on the table: the shipped ask sentence covers what the model cannot see, so ambiguous references (visible, but two of them) slipped through on the mid tiers. - [Study AG: The discourse gap closes on every tier; the visibility clause bites](https://www.lightningjar.com/research/barkup-bench/ag): One border of the ask-path map was never tested: Study X's discourse construction, where "undo that" against a carrier-less editor failed 0 of 144 with every failure a valid silent guess. - [Study AJ: The error message didn't matter](https://www.lightningjar.com/research/barkup-bench/aj): Returning barkup's structured validation issues verbatim has been a design commitment in every arm of this series, the closing instruction of playbook guideline 01, and standing guidance in the production codebase, and i. - [Study AK: The fix works where it can, and the frontier tier invented consolidation](https://www.lightningjar.com/research/barkup-bench/ak): Study AH found that a twenty-first declaration at the memo's full cap always kills a note, and the victim is always a goal. - [Study AL: The gate fails on a moved baseline; and unproven does not ship](https://www.lightningjar.com/research/barkup-bench/al): Study AK left one pathway open: the app-side eviction cannot restore a note the model pruned before sending, and the mid tiers pruned goals client-side in 4 to 6 cells of ten. - [Study AM: The notice learned to ask for everything back](https://www.lightningjar.com/research/barkup-bench/am): Twice in two studies; both times unregistered; opus answered an eviction notice by re-sending the memo compressed into fewer sentences carrying all twenty-one needles: told a note had died, the frontier tier invented l. - [Study AN: Ask or act: tool availability dissolves the visibility-clause tax](https://www.lightningjar.com/research/barkup-bench/an): With a view tool simply available, the ~70% NEED-INFO tax on fully specified edits vanished on every tier; the tested fetch-before-ask prompt clause was redundant on the frontier and unsafe below it, so it stays unshipped. - [Study AO: Canonical-tag steering: the catalog read is the whole mechanism](https://www.lightningjar.com/research/barkup-bench/ao): Unguided models never match a tag catalog's exact casing (0/36 clean everywhere); with a tags_list tool they consult it unprompted and land canonical on the first attempt; warnings alone cannot recover, and hard gating is unnecessary. ## Blog - [What It Means to Make Your Website Agent-Ready](https://www.lightningjar.com/blog/agent-ready-website): The web learned to speak to browsers, then to search engines. Now it needs to speak to AI agents. What we shipped to make lightningjar.com agent-ready, and what we learned. - [What Premium Web Design Looks Like in the Age of AI Images](https://www.lightningjar.com/blog/premium-web-design-ai-images): A prediction: typography-led sites will become the look of premium, and image-heavy sites will read as cheap, because AI collapsed the cost signal images used to carry. - [Why We Are Switching Away from Google Fonts](https://www.lightningjar.com/blog/switching-away-from-google-fonts): Google Fonts sends every visitor's IP address to Google, a German court called that a GDPR violation, and the caching benefit died in 2020. We switched to Bunny Fonts. - [QR Codes for Every Bus Stop, Printed by the Website Itself](https://www.lightningjar.com/blog/bus-stop-qr-codes): Every CCRTA bus stop has a QR sticker pointing at its live departure board. The website generated the print run itself: CMYK separations, kiss-cut lines, outlined type. - [Parsing a Transit System into One Megabyte of JSON](https://www.lightningjar.com/blog/gtfs-pipeline): The build pipeline behind CCRTA's transit maps: a from-scratch GTFS parser, a longest-shape geometry heuristic, retired-stop diffing, and a daily cron that commits the result. - [Building a Modern Transit Website: Live Bus Tracking, a System Map, and a Stop Finder on Open Data](https://www.lightningjar.com/blog/modern-transit-website): How we built CCRTA's transit website: a live bus tracker, real-time departure boards, a system map, and a stop finder, all on open GTFS data with no always-on server. - [Cold Email Is Spam](https://www.lightningjar.com/blog/cold-email-is-spam): Every day our inbox fills with pitches for lead lists and AI cold email engines. We report them all as spam, and we do not send cold email ourselves. Here is why. - [Give the Model a Tool, Not a Rule](https://www.lightningjar.com/blog/give-the-model-a-tool-not-a-rule): We pre-registered the prompt rule everyone would write and measured it against simply handing the model a tool. The tool won on every tier; the rule was harmful below the frontier. - [The $effect Trap: Why Svelte's Escape Hatch Gets Overused](https://www.lightningjar.com/blog/the-effect-trap-why-svelte-s-escape-hatch-gets-overused): Why humans and AI agents both overuse Svelte's $effect, what it costs in performance and correctness, and how we lint for it with Fallow. - [Why We Switched from Google Analytics to Plausible](https://www.lightningjar.com/blog/why-we-switched-to-plausible): Why Lightning Jar replaced Google Analytics with Plausible across our sites and most client sites: privacy, lighter tracking, simpler privacy policies, and open source. - [The Error Message Didn't Matter](https://www.lightningjar.com/blog/the-error-message-didnt-matter): For thirty-five studies, one mechanism rode along in every arm of our benchmark without ever being tested: when a model's patch fails validation, we return the structured issues verbatim for a correction round. It felt obviously load-bearing. Study AJ finally isolated it, by seeding known failures and varying only the feedback text: the full structured issues, bare issue codes, or nothing but 'the anchored patch was invalid.' The result is parity on all three models. Opus recovered 45 of 45 in every arm, including from the bare sentence. Gemini scored an identical 42 of 45 in every arm, missing the same three cells each time no matter what we told it. Told a patch failed, models simply re-derive the correct edit from the task and the tree. The verbatim-issues commitment survives with its rationale corrected: it is developer UX, not model recovery. The error message was for us. - [It Asked About Things It Already Knew](https://www.lightningjar.com/blog/it-asked-about-things-it-already-knew): The ask path had one unmapped border left: dangling references. 'Undo that' against an editor with no context used to produce a valid, silently wrong patch 144 times out of 144. We pointed the shipped permission sentence at it, and the border closed on every tier: 138 of 144 silent guesses became questions that named the missing antecedent precisely. Then the tax check failed on all three models, and the failure is a small masterpiece of letter-following. With an echo supplying everything needed, the node id, the attribute, both values, the models quoted that information back to us and asked anyway, because the sentence says a node that is not visible warrants a question, and the target sat outside a skeleton view. An anchored patch needs only the id. They had the id. They asked. The hatch's famous zero tax turns out to be conditional on the view contract it rides along with, which makes them one system, not two features. - [The Twenty-First Note: How Three Neutral Components Compose into Silent Data Loss in LLM Memos](https://www.lightningjar.com/blog/the-twenty-first-note): The session-notes memo is the most load-bearing mechanism our benchmark series ever shipped, and every study that validated it used three to six notes. The shipped implementation caps it at twenty, with a normalize step that silently drops the excess. Study AH filled it up. Below the cap, the memo is flawless at scale: perfect recall from a full memo at every position, standing rules applied with zero cross-contamination, lossless full-replace updates, sixty of sixty. Then a twenty-first declaration arrives, and a note dies every time. In thirty out of thirty cells, on all three models, the note that died was a goal, the one class of information only the memo carries. The block renders goals last, and everything that trims a list eats from the tail. Nobody designed that failure ordering. It fell out of a rendering order, a truncation clamp, and a cap nobody had ever filled. - [Repeating the Goal Doesn't Make It Yours](https://www.lightningjar.com/blog/repeating-the-goal-doesnt-make-it-yours): One clause in our shipped prompt rules had been living on an inference: before a goal-directed rewrite, restate the goal in your own words. It sounds like obvious good hygiene, the LLM equivalent of repeating an order back at a drive-through. Study AF measured it with our judge-graded protocol, and the result is the cleanest refutation in the series. Made to restate a goal it had read from the document, every model complied perfectly, ninety times out of ninety, and then lost every single decisive comparison to a model that was simply told the goal. Zero wins. The model says the goal accurately, in its own words, and then writes the wrong paragraph anyway. Where a goal comes from matters more than whether the model says it aloud, and one more obvious-looking prompt clause turns out to be theater. - [Only the Frontier Knows When to Ask](https://www.lightningjar.com/blog/only-the-frontier-knows-when-to-ask): Two studies ago we found that one sentence of permission turns silent guessing into precise questions. This study tried to break that sentence, by walking it down a five-level ladder of ambiguity and by answering the questions it produces. The two failure modes everyone worries about never showed up: zero false asks on ninety clear requests, and a perfect 135 of 135 solves after the user replies. The crack is somewhere stranger. When a request matches two visible nodes equally well, the frontier model asks which one you meant, naming both ids, fifteen times out of fifteen. The mid-tier models, with the same permission in the same prompt, ask once in fifteen. One silently edits both nodes. The other silently picks one. Knowing that a question is the right answer turns out to be a capability. - [The Frontier Doesn't Need the Training Wheels (We Re-Ran Everything to Find Out)](https://www.lightningjar.com/blog/the-frontier-doesnt-need-the-training-wheels): Twenty-nine studies of our benchmark series validated an editing stack on two models, and then the product shipped on a third. That gap has a name in our own findings: serializer advice inverts between models, and per-tier behavior cannot be extrapolated. So Study AD re-ran the entire core stack on claude-opus-4.8, the tier our surfaces actually run, with every corpus, prompt, and grader reused verbatim. Every gate passed, mostly at the top of the prior bands. And the ablation produced the study's real finding: the worked examples that rescued sonnet's stateless sessions are not needed on the frontier tier at all. Bare stateless sessions scored a perfect 240 of 240. The training wheels are for the smaller bikes, and they cost so little you should keep them bolted on anyway. - [The Model Always Knew What It Couldn't See](https://www.lightningjar.com/blog/the-model-always-knew): For twenty-eight studies, the villain of our benchmark series was silence. A model missing information never said so: ninety silent inventions, one hundred forty-four silent guesses, one hundred twenty obliviously polished paragraphs, and not one clarifying question anywhere. Study AC finally asked why, by doing the one thing no study had done: it gave the model permission to ask. The answer rearranges how we read every earlier failure. With a one-sentence escape hatch, every model asked on every unsolvable task, 270 of 270, never once asked when it had what it needed, and named the exact missing node every single time. The guessing was never blindness. It was obedience. - [The Arcade Game With No Game Loop](https://www.lightningjar.com/blog/the-arcade-game-with-no-game-loop): Every game tutorial starts the same way: write the loop, tick sixty times a second, update every position, check every collision. Donut Shooter, our browser arcade game, has no loop at all. Donuts fall on closed-form animation curves, the hit is decided the instant you click, and the moment of visible impact is computed once, at fire time, by bisecting the gap between two known trajectories. An essay on what happens when you treat time as something you can query instead of something you must process. - [Stronger LLMs Follow Conflicting Instructions More Literally, Not Less](https://www.lightningjar.com/blog/stronger-llms-follow-conflicting-instructions-more-literally): Correction, July 13: the headline finding did not survive its own pre-registered confirmation study. Study AA inverted it, and the foreword explains what happened. The original post follows unchanged. Study Z, the twenty-sixth in our pre-registered benchmark series, finally measured the thing almost every AI document editor does without evidence: shipping a standing context block with every request. Company background, client records, a twelve-rule styleguide. Does the model actually use it? The answer is a clean yes: 216 of 216 on facts and rules across three models, zero cross-client contamination in 324 cells, and no burial effect anywhere in the styleguide. The hazard we found instead lives in the styleguide itself. When a standing rule collides with what the user asked for, models don't break either one. They pick a reading. And the strongest model picks the most literal reading most often. - [The Number That Doesn't Fit in a Number: What a Kindergartner's Question Taught Us About Types](https://www.lightningjar.com/blog/the-number-that-doesnt-fit-in-a-number): When our principal's son came home from kindergarten fascinated by how big numbers could get, we built him Numberoo: type any number up to a googol and it names it in English, out loud. The catch is that a googol does not fit in a JavaScript number, and the fix is the whole lesson: the app never parses your input at all. The digit string is the data structure. A short essay on picking the representation the problem actually wants, from a 157-line engine with 157 lines of tests. - [Undo That: The One-Line Echo That Replaces a Transcript](https://www.lightningjar.com/blog/undo-that): Study X, the twenty-fourth in our pre-registered benchmark series, measured the most common request in any real editing chat and the last one our benchmark had never tested: follow-ups that point at the previous edit. "Also make that same node bold." "Apply the same change to the footer." "Actually, undo that." Without something carrying the word that, the result was the strongest silent failure of the whole series: zero of 144 across three models, every miss a valid, applied, confidently wrong patch. Full history fixes it, but so does something far cheaper: a one-line note the application appends automatically, recording what it just applied, from and to. The echo ties the transcript on every model at half the cost, and on the production tier it beats the transcript outright. The measured stateless session stack is now complete: a fresh view, two worked examples, the memo, and the echo. - [Hand It Everything It Needs: 23 Pre-Registered Studies on LLM Document Editing](https://www.lightningjar.com/blog/hand-it-everything-it-needs): The updated capstone of our open benchmark series. Twenty-three pre-registered studies, more than 19,000 scored model runs, five models, one published correction, and several kept self-refutations later, the question "how should an LLM agent edit structured documents" has a measured answer with a number on every component: stable ids, anchored patches, focused views for the values an edit must read, one search call for finding targets, two worked examples instead of conversation history, a memo the agent writes itself for facts and goals, and app-side decomposition for bulk edits. The model is a brilliant executor with no context of its own. Hand it everything the request assumes, and almost nothing else. - [The Browser Is an Instrument: Building a Playable Synth with the Web Audio API](https://www.lightningjar.com/blog/the-browser-is-an-instrument): Fifths, our open-source circle-of-fifths chord player, ships no audio files. Every sound is synthesized in the browser: oscillators for the notes, a gain envelope to stop the clicks, a convolution reverb whose impulse response is generated from decaying noise, and multi-touch press-and-hold playback keyed by pointer id. A tour of what it takes to make a web page feel like an instrument, including the iOS unlock ritual and the tab-visibility etiquette nobody tells you about. - [F♯ Is Not G♭: Music Theory as a Data-Modeling Problem](https://www.lightningjar.com/blog/f-sharp-is-not-g-flat): On a piano they are the same key, and in our chord player they are the same frequency. But the moment our circle-of-fifths instrument had to display chord names, the same pitch needed different names in different keys, and a bug report taught us the difference between what a note is and what a note is called. A short essay on encoding domain rules in data and unit tests, from the smallest codebase we maintain. - [Who Writes the Memo? Auditing the Safety Net We Shipped](https://www.lightningjar.com/blog/who-writes-the-memo): Study W, the twenty-third in our pre-registered benchmark series, closed the gap our own briefs had been disclosing for three days: Studies T and V validated the session-notes memo with perfect harness-written extraction, but what shipped to production delegates the writing to the agent itself, through a tool and a prompt rule, with a 32-message history window alongside. That window hides a nasty possibility: callbacks succeed via history whether or not the agent ever writes the memo, so an empty memo is invisible until the conversation scrolls, like a backup nobody has ever tried to restore. We tested the shipped mechanism verbatim on sessions long enough to cross the window, with a mid-session retraction, on three models including the production tier. Both gates passed: the agent records faithfully (recall 36 of 36 per model, retractions handled, zero noise), keeps recording even when history makes the memo redundant, and the post-truncation safety net holds. - [Views Carry Values, Memos Carry Goals: Our First Judge-Graded Study](https://www.lightningjar.com/blog/views-carry-values-memos-carry-goals): Study V, the twenty-second in our pre-registered benchmark series and the first that could not be graded deterministically, asked whether the context fixes from Studies T and U survive qualitative goals like "rewrite this paragraph to focus on our central thesis." To keep our integrity rules intact, the LLM judge had to pass its own pre-registered exam before grading anything, and both judges aced it 50 for 50. The results split cleanly: models that could not know the goal polished the wrong paragraph without complaint, the application memo carried the goal at full parity with an explicit instruction, and the surprise, models shown the document node where the goal lived read it but wrote measurably less focused prose, losing 117 of 120 judged comparisons. Views carry values; memos carry goals. - [The Two Things Your Agent Can't See: Memos and Mentioned Nodes](https://www.lightningjar.com/blog/the-two-things-your-agent-cant-see): Studies T and U, the twentieth and twenty-first in our pre-registered benchmark series, mapped the two blind spots of a stateless LLM document editor. Study T: requests that depend on earlier conversation fail 100% of the time by construction, and an app-maintained memo (three note lines per session) fixes every one at 2% extra cost. Study U: edits that must read a second node against a target-only view never error; they silently invent plausible values, 90 out of 90 times. Putting every mentioned node in the view fixes all 90 at 25 times less input than the whole tree. The model doesn't need memory or the full document. It needs your application to take notes and open the right pages. - [The Thirty-Sixth Edit: Long LLM Sessions Don't Need Memory Either](https://www.lightningjar.com/blog/the-thirty-sixth-edit): Study S, the nineteenth in our pre-registered benchmark series, ran the two surviving session recipes through 36-edit sessions, three times the horizon everything else was measured at. Both held. The stateless recipe (no conversation history, just two worked examples in the system prompt) showed no late-session decay: edit 36 lands as reliably as edit 1. What diverges is cost. Keeping history means the meter runs, growing to about 24k input tokens per edit by the end; the stateless recipe stays flat at about 2.1k, five to six times cheaper per session. The post closes with the series' complete practical advice for builders of LLM document-editing apps. - [barkup 0.5: Your Code Finds the Targets Now](https://www.lightningjar.com/blog/barkup-0-5-deterministic-selection): barkup 0.5 ships selectNodes, a deterministic structural selector that enumerates every node matching an exact query. It is the smallest feature in the series and the best-measured: Study Q found that models leave multi-target edits partially complete under every strategy tested, and Study R found that splitting the job (code enumerates the targets, the model makes one small edit per node) ran 90 of 90 fan-out tasks with zero subtask failures at about a third of the cost. The principle: give deterministic work to deterministic code. - [Your Agent Doesn't Need a Memory: Two Worked Examples Replace Session History](https://www.lightningjar.com/blog/two-examples-replace-a-memory): Two more pre-registered barkup-bench studies. Study P found what session history was actually doing all along: teaching, not remembering. Two unit-tested worked examples pasted into the system prompt restore stateless editing sessions to full-history accuracy on both models, at a flat 2,100 input tokens per step with no context ceiling. Study Q stress-tested the shipped recipe against fan-out edits and everything broke at once: even with retrieval solved, models finish only about half of a multi-node target set, the search recipe spirals, and the two models invert for the first time in sixteen studies. The fix is app-side decomposition into single-target edits. - [barkup 0.4: The Model Finds the Node Now](https://www.lightningjar.com/blog/barkup-0-4-content-search): barkup 0.4 ships content search: three new exports in the /view module (findNodes, renderSearch, and the pre-registered SEARCH_PROMPT_RULES) let the model find its own target nodes from a plain-language request. Study N backed the feature before it shipped: oracle-level grounding on the frontier model and whole-tree-level on the cheap one, at a median of one search call and about a tenth of full-tree input, from a deterministic keyword scorer of about thirty lines. No embedding index shipped, because embeddings measured no better than keyword overlap. - [Then We Found the Cheap Part: One Search Call Grounds LLM Tree Edits](https://www.lightningjar.com/blog/then-we-found-the-cheap-part): Two more pre-registered barkup-bench studies, one aimed at each of last week's failures. Study N replaced model-driven tree navigation with a single deterministic keyword search tool and the grounding trap disappeared: oracle-level accuracy at a median of one search call, the cheap model rescued from 23 of 45 to 39 of 45, input around a tenth of pasting the tree, and off-the-shelf embeddings adding nothing over keyword overlap. Study O printed exact positions on every view and stateless sessions still misplaced nodes, so keep the history. One gate opened, one stayed shut. - [The Untested Half of Your WYSIWYG](https://www.lightningjar.com/blog/the-untested-half-of-your-wysiwyg): Markdown to HTML is a solved problem. The way back, DOM to markdown, is where WYSIWYG editors quietly eat documents: fences that grow a blank line per save, lists that renumber themselves, footnotes that vanish a trip late. We extracted our blog editor's serializer into @kevinpeckham/barkdown, an open-source codec whose contract is a mathematical property you can test: one round trip canonicalizes any input, and a second trip is byte-identical. Here is what the contract buys, what a fuzzer found on the way to the first release, and why the fix that landed sixteen minutes before the release commit is the whole thesis in one URL. - [We Tried to Delete the Hard Parts. The Benchmark Said No.](https://www.lightningjar.com/blog/the-benchmark-said-no): Two more pre-registered barkup-bench studies tried to delete the last two hard parts of the recipe: letting the model find its own target nodes, and letting sessions forget their history. Both gates failed. Grounding a human-style description costs 7 to 9 points, model-driven tree navigation costs more than pasting the whole tree and collapses on the cheap tier, naive keyword retrieval lands at 60%, and stateless sessions triple the corrupted end states. The honest boundary is the finding. - [Stable IDs Are All You Need: Seven Studies on Letting LLMs Edit Trees](https://www.lightningjar.com/blog/stable-ids-are-all-you-need): The capstone of the barkup-bench series: seven pre-registered studies, more than 13,000 scored model runs, four models, trees from 5 to 1,000 nodes, and sessions up to twelve edits. It all compresses to one sentence: give every node a stable id, and never make the model reproduce anything it is not changing. Here is how we got there, including the part where we had to correct ourselves in public. - [barkup 0.3: Focused Views, or Why the Model Doesn't Need to See Your Tree](https://www.lightningjar.com/blog/barkup-0-3-focused-views): barkup 0.3 ships focused views: instead of serializing the whole tree into the model's prompt, renderView renders only the part an edit concerns, and the model patches the full tree from that partial picture. Three pre-registered studies backed the feature before it shipped: accuracy statistically unchanged at 2 to 4% of the input cost, HTML as the native rendering, and a per-turn view that erases session drift while costing four times less. - [Your Agent's Session Is Drifting (and the Fix Is Cheaper Than the Bug)](https://www.lightningjar.com/blog/your-agents-session-is-drifting): Benchmarks grade single edits; production agents run twelve-edit conversations. We pre-registered a session study: 140 sessions, 1,680 graded steps, four ways of showing the model the tree it's editing. Serialize-once drifts, and the drift is invisible until you diff the end state. Refreshing periodically is the worst of both. And the policy that wins on accuracy at every model tier, a fresh focused view every turn, is also the cheapest by 4 to 15x. The most dangerous policy passes validation while silently corrupting the tree. - [The Model Doesn't Need to See Your Tree](https://www.lightningjar.com/blog/the-model-doesnt-need-to-see-your-tree): Two final pre-registered studies in the barkup-bench series. Study I replaced the full tree in the prompt with a focused view and accuracy didn't move, at 2 to 4% of the input cost, with input that scales with tree depth instead of node count. Study J re-ran the views rendered as HTML instead of JSON: identical accuracy, 9 to 24% fewer tokens, and a small validity edge that partially rehabilitates the claim this whole series started by killing. - [We Found the Crossover (It Wasn't Where Anyone Looked)](https://www.lightningjar.com/blog/we-found-the-crossover): We extended barkup-bench to trees of 300, 600, and 1000 nodes, with 45 fresh pre-registered editing tasks on two models. The crossover we went looking for exists, but not between the interfaces anyone was arguing about. Whole-tree rewrite becomes a frontier-model-only technique, positional JSON Patch keeps collapsing, and id-anchored patches hold 87 to 100 percent at every size, in seconds instead of minutes. - [A Deprecated Accessor That Still Typechecks Broke My Benchmark (and Maybe Your Agent)](https://www.lightningjar.com/blog/tool-history-footgun): Every multi-turn failure in our benchmark traced back to one line of conversation plumbing: a deprecated accessor that still typechecks but silently changed meaning in v7, erasing the model's own tool calls from its history. Small models collapsed, frontier models covered it up, and we published a phantom 33-point effect. Here's the bug, the controlled A/B that proved it, and the five-minute audit for your own agent. - [barkup 0.2: We Shipped What the Benchmark Told Us](https://www.lightningjar.com/blog/barkup-0-2-anchored-patches): Our benchmark found that id-anchored patches match whole-tree rewrite's reliability at the lowest cost of any condition we measured. So barkup 0.2 ships them: an optional patch utility that addresses nodes by id, never by position, riding on the id stability the codec already guarantees. - [We Benchmarked It: What Held Up in 'HTML as a Native Data Format for LLMs', and What Didn't](https://www.lightningjar.com/blog/barkup-bench-results): We pre-registered a benchmark to test the argument in 'HTML as a Native Data Format for LLMs': 9,600 scored runs across six conditions and four models. Corrected July 2026: a harness defect had hidden the models' own tool calls from multi-turn history, manufacturing the original rewrite-vs-tools gaps. With correct history, no interface dominates on accuracy; the cost findings and JSON Patch's large-tree collapse stand. Mixed results and corrections, published as found. - [Content Is an Overlay: Separating Words from Structure in an AI Document Editor](https://www.lightningjar.com/blog/content-overlay): Words and structure should not live in the same document: the person typing a headline must not be able to break the layout, and neither should the AI drafting the copy. So our platform separates them, storing content as a flat overlay of particles that register onto the template's stable node ids like animation cels dropping onto pegs. Here's the design, the instance problem, and the scars. - [Why We Moved Our Document Production into Web Code: The Origin of Replicator](https://www.lightningjar.com/blog/replicator-origin): CMSs frustrate everyone in one of two directions, and print design fails the same way with different symptoms. The origin story of Replicator: how an agency fired its design software, moved PDF production into SvelteKit, built an edit-in-place editor and versioned repository, and discovered the whole system already spoke the LLM's native language. - [If the Solution Is Not Beautiful, It Is Wrong: Twenty-Five Years of Lightning Jar](https://www.lightningjar.com/blog/twenty-five-years): We started as Siite Interactive in 2001, when most people didn't own a mobile phone and the iPod had just arrived. Twenty-five years later, the web has been reinvented several times over and so have we. A look back at what changed, what we built, and the two things we refused to give up: our independence and a line from Buckminster Fuller. - [HTML as a Native Data Format for LLMs: Why We Encode Our Data in Markup Instead of JSON](https://www.lightningjar.com/blog/ast-as-html): LLMs have deep, pre-trained fluency in HTML. So when the AI assistant in our document platform reads and writes template layouts, we encode the tree as markup instead of JSON. Here's why a format the model already speaks beat a granular JSON tool API, and the scars we picked up along the way. - [Utility CSS for Markup That Doesn't Exist Yet](https://www.lightningjar.com/blog/utility-css-for-markup-that-doesnt-exist-yet): Utility CSS toolchains assume your markup exists at build time. In an AI product it doesn't: Replicator's documents are authored by a language model and stored in blob storage, so the build-time scanner has never seen a single class our customers actually look at. Here is how we run one UnoCSS config as two compilers, one at build time for the app and one in the browser for the documents, how a palette made of formulas lets utility classes re-skin per brand without a rebuild, and the three scars that taught us where the sharp edges are. - [Migrating a Decade-Old Pimcore Site to OpenDXP on Rootless Podman and Caddy](https://www.lightningjar.com/blog/pimcore-opendxp-podman-migration): When Pimcore's license change pushed us to move a ten-year-old Community Edition deployment to OpenDXP, we used the migration to modernize everything underneath it too: a fresh RHEL server, rootless Podman for real container isolation, and Caddy replacing Apache and purchased certificates. Here's what changed, and why the client sleeps better. - [Pimcore or OpenDXP: A Fork in the Road for Long-Tenured DXP Stacks](https://www.lightningjar.com/blog/opendxp-pimcore-fork): Pimcore relicensed its Community Edition away from GPLv3, removed the ExtJS admin UI, and now requires a full copyleft-dependency purge to upgrade. OpenDXP forks the last GPLv3 release. Here's how we're advising clients. - [Anatomy of a WordPress Compromise: One Abandoned Plugin, Ten Months of Warnings](https://www.lightningjar.com/blog/wordpress-abandoned-plugin-compromise): We were called in to investigate a compromised WordPress site and found a sophisticated backdoor serving malware to every visitor. The malware was professional. The way in was not: an abandoned payment plugin, pulled from the WordPress repository for an unpatched vulnerability, left running for ten months across two ignored security alerts. Here's the anatomy, and why it's a WordPress-shaped problem. - [Please Don’t Force Links to Open in New Tabs](https://www.lightningjar.com/blog/why-links-should-not-open-in-new-tabs): Clients often ask us to force links to open in new tabs. We can, but we strongly advise against it. Here’s why. - [Why Open Source Beats Proprietary Platforms for B2B Websites](https://www.lightningjar.com/blog/open-source-b2b-advantage): Why open source technology gives B2B organizations a durable competitive edge over proprietary platforms: lowering costs, avoiding vendor lock-in, ensuring security transparency, and accelerating innovation. - [Why SvelteKit is the Best Choice for Modern B2B Websites](https://www.lightningjar.com/blog/sveltekit-vs-wordpress-b2b): A pragmatic comparison of SvelteKit and WordPress for B2B websites: covering security, cost, performance, DX, sustainability, and time-to-value. - [Questions, Decisions & Compromises](https://www.lightningjar.com/blog/questions-decisions-compromises): This article proposes some thoughts on strategy, design, and implementation. - [Why We Do Not Sell Digital Advertising](https://www.lightningjar.com/blog/no-digital-advertising): This article looks at the reasons why Lightning Jar doesn't offer digital advertising. - [SEO In The Age of LLMs](https://www.lightningjar.com/blog/seo-is-changing): The search landscape is undergoing its biggest shift since ten blue links. LLMs are changing how people discover, evaluate, and act on information, often without visiting a website at all. Here is what is changing, what still matters, and how to make your content findable, quotable, and measurable in the age of AI assistants. - [Why We Left WordPress Behind](https://www.lightningjar.com/blog/leaving-wordpress): This article looks at the reasons why Lightning Jar is leaving the WordPress platform. - [The Project Management Software Trap](https://www.lightningjar.com/blog/project-management-software-trap): This is a blog post about the pitfalls of project management software solutions. ## Customer Stories - [The Evolution of Replicator: How Our Custom AI Document Platform Rises to Meet Modern Challenges](https://www.lightningjar.com/customer-stories/replicator-evolution): Replicator began as a way to help a lean marketing team produce more on-brand collateral, and evolved into a full AI document platform: a brand repository, a versioned templating engine, and an LLM assistant that designs layouts and drafts copy, all feeding one editor where a human finishes the document by clicking into the page and typing. - [Ten Years and One Unified Stack for SecureLogix: Marketing Site, Partner Portal, Knowledge Base, and an LLM Brand Platform](https://www.lightningjar.com/customer-stories/securelogix-digital-stack): For more than a decade, Lightning Jar has been the primary digital agency of record for SecureLogix, delivering a unified stack: marketing site, partner portal, knowledge base, and a custom LLM-powered brand operating system that helps a lean team outperform larger competitors. - [14 Languages in Days, Not Quarters: Sitewide AI Translation for CCRTA's Title VI Mandate](https://www.lightningjar.com/customer-stories/ccrta-multilingual-translation): Under Title VI, transit agencies must provide meaningful access for riders with limited English proficiency, and an upcoming audit put a date on it. While CCRTA evaluated enterprise localization platforms with recurring five-figure fees, Lightning Jar built translation into the site's own rendering pipeline: every page in fourteen languages, stop and route names protected, downloadable translated schedule PDFs for every route, and one-time translation compute of a few dollars per language. - [Selling Seats, Not SKUs, for PetroSkills: An OpenDXP and Vue Storefront with ERP-Integrated Dual Checkout](https://www.lightningjar.com/customer-stories/petroskills-ecommerce): PetroSkills sells training, not widgets: self-paced e-learning alongside scheduled in-person and virtual courses with real dates, locations, instructors, and limited seats. Lightning Jar built their e-commerce platform on OpenDXP with a Vue frontend and a bespoke dual-checkout workflow, integrated with the client's custom ERP so that buying a scheduled course doubles as attendee registration. - [Leaving WordPress Behind for CCRTA: A SvelteKit Rebuild with a Real-Time GTFS Bus Tracker](https://www.lightningjar.com/customer-stories/ccrta-transit-website): The Corpus Christi Regional Transportation Authority needed more than a website refresh: WordPress had become a security liability under constant automated attack, an accessibility sore point, and a ceiling on custom features. Lightning Jar rebuilt the platform on SvelteKit and Hygraph with a serverless architecture, and delivered a real-time bus tracker built on open GTFS data for a fraction of the cost of turnkey transit systems. - [Five Years and One Brand System for Sage Energy Holdings: Multi-Brand Identity, a SvelteKit Website, and a Self-Service Email Signature Platform](https://www.lightningjar.com/customer-stories/sage-energy-brand-system): Lightning Jar has served as Sage Energy Holdings' long-term digital partner since 2021, growing from a single website engagement into an integrated brand and technology system that spans four trading divisions, a full corporate website, a self-service email signature platform, brand collateral, and the launch of an entirely new company. The result is one coherent brand that carries very different businesses (from natural gas to carbon markets) while a lean team keeps everything consistent across offices and channels. - [A Modern Design System for TransTrack's Transit Software: A Reusable Pattern Library, Style Guide, and Code-Based Prototypes for a Cloud EAM Migration](https://www.lightningjar.com/customer-stories/transtrack-design-system): TransTrack Systems brought in Lightning Jar to modernize the look, feel, and interaction design of its Enterprise Asset Management (EAM) tool as the product moved into a new cloud-based platform. In a fast, tactical engagement, Lightning Jar delivered a reusable design system and style guide, static mockups, and working code-based prototypes, giving TransTrack's engineering team a clean, consistent foundation to migrate the EAM tool onto and a pattern library to carry across the rest of the TransTrack ecosystem. - [Designing the In-Store Digital Experience for Northgate González Market: UX Strategy, Research, and Design Across Financial Services, Produce Supply Chain, and Self-Service Kiosks](https://www.lightningjar.com/customer-stories/northgate-in-store-ux): Northgate González Market brought in Lightning Jar as its UX strategy and design partner for an ambitious wave of in-store digital initiatives: a customer financial-services platform, a produce supply-chain tool, and self-service ordering kiosks. Across all three, Lightning Jar owned the research, experience strategy, and design, then handed development-ready specifications to Northgate's engineering and platform teams to build. The work paired deep, on-the-ground research in Northgate's stores with rigorous interaction design, so that technology built for a largely Spanish-speaking, family-oriented customer base felt effortless and welcoming. - [A Decade as Zenith Energy's Digital Partner: A Multi-Region Corporate Site, Interactive Sustainability Reports, and a Unified SvelteKit Monorepo](https://www.lightningjar.com/customer-stories/zenith-energy-digital-partner): Lightning Jar has been Zenith Energy Terminals' digital partner since the company's earliest days, designing and building its corporate web presence in 2014 and evolving it ever since. Over roughly a decade the relationship has grown from a single responsive website into an integrated program of work: a multi-region corporate site spanning North America and Europe, ongoing content and SEO, the digital expression of Zenith's ESG story, award-quality sustainability reports delivered as both interactive web experiences and print, and, most recently, a modern monorepo platform that unifies the site and reports on one shared codebase. - [Launching Hark: UX, Design, and Front-End Build for MediaScience's Self-Serve Research SaaS](https://www.lightningjar.com/customer-stories/hark-mediascience-launch): MediaScience set out to launch Hark (HARK Connect), a new software product that modernizes qualitative research, and it needed to go to market on an unusually tight timeline. Lightning Jar served as the UX, design, and front-end build partner: designing and building the marketing site and launch collateral, and then designing and building the customer-facing product experience, from self-onboarding to dashboard to payment. Working alongside MediaScience's own product team, Lightning Jar delivered a polished, self-serve SaaS experience fast enough to debut at an industry conference. - [Finding Baloo's Brand: Strategy for a Wellness Brand with a Deeper Purpose](https://www.lightningjar.com/customer-stories/baloo-brand-strategy): Baloo Living had a beautiful product and a founder with a genuine mission, but it was launching into a crowded weighted-blanket category where nearly every competitor promised the same thing. Lightning Jar partnered with Baloo to define what the brand truly stood for: running founder and customer research, then building a complete brand strategy (positioning, brand idea, mission, values, differentiators, and a manifesto), along with a personal brand for the founder. Follow-on work extended that foundation into tone of voice, messaging and content strategy, and a five-year vision, giving a young wellness company a clear, ownable identity to grow from. - [Finding a Bold, Real Voice for a New Home Brand: Brand Strategy, Tone of Voice, and Content Strategy for Rigby Home](https://www.lightningjar.com/customer-stories/rigby-home-brand-voice): Rigby Home is a direct-to-consumer tableware brand, a curated collection of beautifully designed, functional pieces handcrafted in Portugal, created for people making a home that is authentically their own. Ahead of its launch, Rigby partnered with Lightning Jar to turn a strong brand idea into a brand that could actually go to market: a clear positioning, a distinctive tone of voice, and a messaging and content strategy ready to carry the brand into the world. The result gave a young company something rare in a crowded, picture-perfect category: a point of view, and a voice bold and real enough to cut through. - [Building a Rebel Brand for Blue Duck Scooters: Positioning, a "Fly Wild" Brand Idea, and an Iconoclast Launch Campaign for Micromobility](https://www.lightningjar.com/customer-stories/blue-duck-scooters-rebel-brand): Blue Duck Scooters was a San Antonio-born dockless electric scooter company, one of the early entrants in a fast-moving, crowded micromobility category. Ahead of its launch, Blue Duck partnered with Lightning Jar to build the brand: a positioning and messaging platform, a distinctive rebel-spirited personality, and a bold, unconventional teaser and launch campaign built around the idea of "Fly Wild." The goal was not to look like another scooter startup, but to arrive with a point of view strong enough to stand out in a category racing to commoditize itself. Lightning Jar later returned to help evolve the brand's visual identity as the company matured. - [A Modern Digital Presence for Zenith Capital Partners: Brand Refresh, Custom Website, Investor-Portal Integration, and a SvelteKit Rebuild](https://www.lightningjar.com/customer-stories/zenith-capital-digital-presence): Zenith Capital Partners, an energy-focused investment firm, needed a website and brand presence that matched the caliber of the deals and investors it works with. Lightning Jar designed and built a modern, secure, custom website: refreshing the firm's logo and branding, creating a documented design system, writing the messaging, and integrating a clear path to the investor portal. Then it extended the brand into everyday collateral with a self-service email signature system and a branded presentation template. The relationship has since continued into a modern rebuild of the site on a current web stack. - [A Single Source of Truth: Pimcore Data Management for Cappex & EAB](https://www.lightningjar.com/customer-stories/cappex-eab-pimcore-pim): For more than seven years, Lightning Jar has served as the Pimcore partner behind the data that powers a leading college-search platform: first for Cappex, and then, without missing a beat, for EAB after it acquired the company. Lightning Jar helped stand up a Pimcore-based Product Information Management (PIM) system as the single source of truth for the platform's colleges, high schools, and scholarships, then built a repeatable, carefully controlled data-import process and provided the ongoing support, customization, and platform upgrades to keep it running. It's the kind of behind-the-scenes engineering partnership that quietly keeps a data-driven product accurate and current, year after year. - [One Platform, Many Channels: Architecting BlueLine Rental's Digital Ecosystem](https://www.lightningjar.com/customer-stories/blueline-rental-digital-ecosystem): BlueLine Rental, one of the largest construction and industrial equipment rental companies in North America, set out to modernize how customers do business with it online. Over several years, Lightning Jar served as the architect behind that transformation, designing and building not a single project but an interconnected ecosystem: a strategy and research foundation, a unified cloud architecture tying together BlueLine's rental and CRM systems, a product-information backbone for its equipment catalog, a responsive commerce website, a location finder and local-search program, quoting and sales tools, and a customer mobile/web app. The guiding principle throughout was "one platform, many channels": a single, extensible foundation that many customer experiences could be built on. - [A Single Source of Truth Through Two Rebrands and an Acquisition: A Pimcore PIM Partnership for Green Sprouts and O2C Brands](https://www.lightningjar.com/customer-stories/green-sprouts-o2c-pimcore-pim): Lightning Jar has been the Pimcore partner behind the product data of a beloved baby and children's products brand since 2018, through two identity changes and a change of ownership. The work began with i play, Inc., continued after the company rebranded to Green Sprouts, and continues today under O2C Brands, which acquired Green Sprouts in 2023. Across all of it, Lightning Jar built and supported a Pimcore PIM as the single source of truth for the brand's product content and digital assets, trained the client's own team to work in it, kept the platform current, and most recently helped migrate the brand's product data into its new parent company's systems. - [Digital Agency of Record for Avaya: Strategy, UX, and Design for an Enterprise Communications Giant's Shift to Solutions and Cloud](https://www.lightningjar.com/customer-stories/avaya-digital-agency-of-record): Avaya is one of the world's leading enterprise communications companies, and Avaya.com is a sprawling global website serving prospects and customers across a vast portfolio. For years, Lightning Jar served as Avaya's digital agency of record, partnering closely with Avaya's marketing and IT organizations to reshape Avaya.com around the company's strategic shift from selling products to selling solutions and cloud. The relationship was expansive: strategy and roadmap, homepage and navigation redesigns, solution-finding and cross-sell tools, case studies, blog and video experiences, partner and live-chat tools, commerce and purchase-journey design, and a continuous cycle of analytics and optimization. - [The Perfect Cocktail for Marketing Data: One Source of Truth for Product Data Across Brands, Languages, and Regions](https://www.lightningjar.com/customer-stories/beam-suntory-mdm): We helped the Suntory Group architect and deploy a Pimcore MDM / PIM / DAM solution to manage products, product data, images, labels, recipes, and marketing content for hundreds of products and thousands of product variations across languages and regions. - [Launching a Preschool Science Brand Online: Space Racers on Pimcore](https://www.lightningjar.com/customer-stories/space-racers-pimcore-launch): Space Racers is an animated preschool series about a crew of young spaceship cadets, created to teach space science to young children, that came to US public television and broadcasters around the world in 2014. Lightning Jar designed and built the show's digital home, SpaceRacers.org, as one of its earliest Pimcore implementations. The result was a colorful, video-rich, responsive website with two distinct experiences, one for kids and one for parents and educators, built with young children's safety in mind, launched in step with the show's television debut, and supported and grown afterward. - [Pioneering Digital for United Rentals: The First Commercial Pimcore Implementation in North America, and E-Commerce for Equipment Rental](https://www.lightningjar.com/customer-stories/united-rentals-digital-pioneer): United Rentals is the largest equipment rental company in the world, and its digital front door, UnitedRentals.com, was one of the most ambitious enterprise web platforms in its industry. Beginning in 2011 and launching in 2012, Lightning Jar helped build the site on Pimcore, understood to be the first commercial Pimcore implementation in North America, and then served as United Rentals' digital partner across many years and many projects that followed. Along the way, the work helped bring a true e-commerce experience to a traditional, relationship-driven B2B category for the first time. ## Reading List - [Introducing the Agent Readiness Score](https://www.lightningjar.com/reading-list/agent-readiness): Cloudflare's isitagentready.com scores how well a site serves AI agents across discoverability, content accessibility, bot access control, and capabilities. - [LLMs Reward Expertise](https://www.lightningjar.com/reading-list/llms-reward-expertise): Sean Goedecke on why domain expertise is the most important prompting skill: LLMs democratize access to skills, but experts extract far more value from them. - [We got addicted to an AI model we can't talk about](https://www.lightningjar.com/reading-list/we-got-addicted-to-an-ai-model-we-cant-talk-about): Syntax episode 1021: Wes Bos and Scott Tolinski talk with OpenCode co-founder Dax Raad about model routing, AI costs, and a model his team relies on but cannot name. - [Sarah Guo's Wager](https://www.lightningjar.com/reading-list/sarah-guo-conviction): Dom Cooke's Colossus profile of Sarah Guo, whose firm Conviction is staked on a single wager: the frontier labs will not capture every downstream product and company. - [Rewriting Bun in Rust](https://www.lightningjar.com/reading-list/bun-in-rust): Jarred Sumner on porting all of Bun from Zig to Rust in 11 days with Claude: 6,502 commits, 128 bugs fixed, and a smaller, faster, memory-safe runtime. - [Agent swarms and the new model economics](https://www.lightningjar.com/reading-list/agent-swarm-model-economics): Wilson Lin of Cursor on agent swarms that pair frontier planner models with cheap workers: the unit of work becomes the spec, and the scarce input is a clear description of intent. - [Who's Afraid of Chinese Models?](https://www.lightningjar.com/reading-list/whos-afraid-of-chinese-models): Ben Thompson on why the panic over Chinese AI models is economically overblown: frontier labs are not selling commodity tokens, they are selling intelligence. - [Infinities, impossibilities, and the man in the white linen suit](https://www.lightningjar.com/reading-list/infinities-impossibilities-and-the-man-in-the-white-linen-suit): Gödel proved that rule-based systems cannot fully account for themselves — and that limit, Harper argues, sits underneath today's trillion-dollar bet on scaled AI. - [Overtraining as the Path to Human-like AI](https://www.lightningjar.com/reading-list/overtraining-as-the-path-to-human-like-ai): LLMs may fall short of human-like generalization not for lack of data but for lack of grokking — and the untried experiment is a huge model overtrained on a small corpus. - [The Tokenpocalypse Is Here](https://www.lightningjar.com/reading-list/tokenpocalypse-404-media): As AI providers charge by the token, companies scramble to control the bill, including a tool that quietly rewrites AI output to be more terse. - [Bosses Are Becoming Obsessed With AI](https://www.lightningjar.com/reading-list/bosses-obsessed-with-ai): Workers describe managers who outsource judgment to chatbots: constant AI-driven pivots, nonsensical directives, and even asking the model who to fire. - [Thinking More About Netscape Time](https://www.lightningjar.com/reading-list/thinking-more-about-netscape-time): "Netscape time" once meant moving fast to genuinely innovate. Turned loose on growth for its own sake, the same speed hollows companies out. - [The Hidden Cost of Taking Yourself Too Seriously](https://www.lightningjar.com/reading-list/hidden-cost-of-taking-yourself-too-seriously): Constant self-monitoring drains the energy that playfulness and flow need. Taking yourself less seriously turns out to be good for creativity and resilience. - [Why We're Choosing Stewardship Over an Exit](https://www.lightningjar.com/reading-list/thoughtbot-stewardship-over-exit): Rather than sell or seek an exit, thoughtbot moved its ownership into a perpetual purpose trust, a company structure built to never need to be sold. - [Ad Infinitum](https://www.lightningjar.com/reading-list/ad-infinitum): Google is rebuilding search around AI-generated answers where the ad is the answer, quietly breaking its old contract with the open web. - [Why Federated Design Systems Keep Failing](https://www.lightningjar.com/reading-list/why-federated-design-systems-keep-failing): When everybody owns something, nobody owns it. - [The Pre-Training Wall and the Treadmill After It — CoRecursive #121](https://www.lightningjar.com/reading-list/pre-training-wall-corecursive-121): Pre-training as we know it will unquestionably end. We have one internet. Data is the fossil fuel of AI. - [How NASA Built Artemis II's Fault-Tolerant Computer](https://www.lightningjar.com/reading-list/how-nasa-built-artemis-fault-tolerant-computer): To take humans back to the Moon, NASA has engineered a 'fail-silent' architecture that handles everything from cosmic-ray bit flips to total processor divergence. - [Does Code Cleanliness Affect Coding Agents? A Controlled Minimal-Pair Study](https://www.lightningjar.com/reading-list/code-cleanliness-coding-agents): Cleaner code did not make the coding agent more likely to succeed, but it made the agent meaningfully cheaper: fewer tokens, fewer repeated file reads. - [How I use LLMs as a staff engineer in 2026](https://www.lightningjar.com/reading-list/how-i-use-llms-in-2026): The main thing that's changed in the last fifteen months is that agents are really good now. - [Evolved antennas, LLM-generated code, and a potential antifuture](https://www.lightningjar.com/reading-list/evolved-antennas-and-the-antifuture): Being open and transparent is a radical strength, not a weakness. We should not throw this away in the pursuit of a convenient perceived inevitability. - [TanHacked — Syntax #1004](https://www.lightningjar.com/reading-list/tanhacked-syntax-1004): This was not somebody getting any of their credentials stolen at all. - [Hyperblam: Make Music With HTML](https://www.lightningjar.com/reading-list/hyperblam): A dependency-free framework for making music with HTML: instruments, effects, and drum machines built from custom elements, no JavaScript required. - [The House Is Valuable Because It Is the House](https://www.lightningjar.com/reading-list/the-house-is-valuable-because-it-is-the-house): On paring a personal website back to something calmer and warmer, and on the idea, borrowed from Piranesi, that a thing can be valuable simply for being itself. - [Yankee Candles Levels of Abstraction](https://www.lightningjar.com/reading-list/yankee-candles-levels-of-abstraction): Yankee Candle scent names, from "Black Cherry" to the pure abstraction of "Inspire," turn out to be a surprisingly good lesson in levels of abstraction. - [You Deserve a Tech Union](https://www.lightningjar.com/reading-list/you-deserve-a-tech-union): Part history lesson, part how-to guide, part manifesto: a clear-eyed case for why tech workers organize, and how they do it. - [How to win at CORS](https://www.lightningjar.com/reading-list/how-to-win-at-cors): A practical, opinionated deep dive on CORS—why it exists, how it works, and how to configure headers (including credentials, caching, and preflights) without shooting yourself in the foot. - [You Can't Design Software You Don't Work On](https://www.lightningjar.com/reading-list/you-cant-design-software-you-dont-work-on): You can’t design real software well without intimate knowledge of the codebase. Generic advice is mostly useless for existing systems; concrete constraints dominate. - [Phantom Obligation](https://www.lightningjar.com/reading-list/phantom-obligation): We borrowed the inbox UI for RSS and everything after, but kept the guilt without the obligation—unread counts and badges imply someone is waiting when no one is. - [On Affordances](https://www.lightningjar.com/reading-list/on-affordances): Affordances are the cues that make an object’s use obvious. When interfaces hide or blur these cues in pursuit of minimalism, they add friction and block flow; clear affordances make tools feel like extensions of ourselves. - [Mental Models](https://www.lightningjar.com/reading-list/mental-models-nng): A mental model is what users believe about a system. Aligning interfaces with users’ existing expectations reduces errors and confusion; when you must deviate, clearly teach the new model. - [Deep dive into Turso, the "SQLite rewrite in Rust"](https://www.lightningjar.com/reading-list/turso-sqlite): I love Rust and I love SQLite, so you can imagine that I was pretty excited when I learned that "SQLite was being rewritten in Rust": Turso. - [Sixty years of learning the same lesson](https://www.lightningjar.com/reading-list/sixty-years-of-learning-the-same-lesson): GenAI feels like another turning point for software development. It's really just the latest moment in a long, repeating pattern of partial revelation and broad avoidance of how creating software needs to be approached. - [Waiting for dawn in search: Search index, Google rulings and impact on Kagi](https://www.lightningjar.com/reading-list/waiting-for-dawn-in-search): The information we consume shapes our understanding of the world as profoundly as the food we eat shapes our bodies. Search (directly, and indirectly through AI) is the primary mechanism through which we inform political judgments, financial decisions, medical choices, and countless other consequential aspects of our lives. - [Some Thoughts on the Open Web](https://www.lightningjar.com/reading-list/some-thoughts-on-the-open-web): We have to create an Internet where people want to publish content openly – for some definition of 'open.' Doing that may challenge the assumptions we've made about the Web as well as what we want 'open' to be. What's worked before may no longer create the incentive structure that leads to the greatest amount of content available to the greatest number of people for the greatest number of purposes. ## Technologies - [Anthropic (Claude)](https://www.lightningjar.com/technologies/anthropic-claude): AI model provider known for strong reasoning, long context windows, and safety-focused design. - [Arcjet](https://www.lightningjar.com/technologies/arcjet): Edge security platform protecting against bots, abuse, and credential stuffing. - [Astro](https://www.lightningjar.com/technologies/astro): Web framework delivering zero-JS by default with Island Architecture for content-rich sites. - [axe-core](https://www.lightningjar.com/technologies/axe-core): Automated accessibility testing library for catching WCAG issues early in development. - [barkdown](https://www.lightningjar.com/technologies/barkdown): Our open-source Markdown to DOM round-trip codec: edit markdown as a live DOM and serialize it back with provably no silent loss. - [barkup](https://www.lightningjar.com/technologies/barkup): Our open-source toolkit for letting LLMs author and edit typed trees as HTML, with every feature gated on a pre-registered benchmark before it ships. - [BetterAuth](https://www.lightningjar.com/technologies/betterauth): Modern authentication solution with clean APIs and strong multi-tenant support. - [Biome](https://www.lightningjar.com/technologies/biome-formatter-linter): Fast, all-in-one formatter and linter replacing ESLint and Prettier. - [Bun Test](https://www.lightningjar.com/technologies/bun-test): Bun's built-in test runner with extremely fast execution and watch mode. - [Bun](https://www.lightningjar.com/technologies/bun): High-performance JavaScript runtime with fast install, test, and dev server capabilities. - [Change Tracking & Feature Flags](https://www.lightningjar.com/technologies/change-tracking-feature-flags): Feature flag tools enabling gradual rollouts and safe experimentation. - [Claude Code](https://www.lightningjar.com/technologies/claude-code): Anthropic's agentic coding tool; a daily part of how we build, review, and maintain software. - [CSS (Modern Layouts)](https://www.lightningjar.com/technologies/css-modern-layouts): Modern CSS techniques including Grid, Flexbox, custom properties, and container queries. - [Deepgram](https://www.lightningjar.com/technologies/deepgram): Speech-to-text API with fast, accurate transcription models built for developer integration. - [Deno](https://www.lightningjar.com/technologies/deno): Secure-by-default JavaScript runtime with native TypeScript support and web-standard APIs. - [DigitalOcean Spaces](https://www.lightningjar.com/technologies/digitalocean-spaces): S3-compatible object storage with global CDN and predictable pricing. - [Docker](https://www.lightningjar.com/technologies/docker): Container platform for packaging apps into immutable images with consistent behavior. - [DOMPurify](https://www.lightningjar.com/technologies/dompurify): Fast, well-audited library for sanitizing HTML and SVG against XSS attacks. - [Drizzle ORM](https://www.lightningjar.com/technologies/drizzle-orm): TypeScript ORM supporting PostgreSQL, SQLite, MySQL, and CockroachDB with type-safe queries. - [exe.dev](https://www.lightningjar.com/technologies/exe-dev): Cloud Linux VMs built for running coding agents — sandboxed, internet-addressable, with scoped GitHub access. - [Fallow](https://www.lightningjar.com/technologies/fallow): Codebase intelligence for TypeScript/JavaScript—dead code, duplication, and refactor prioritization. - [Git & GitHub](https://www.lightningjar.com/technologies/git-github): Version control and collaboration platform underpinning every project: history, review, and CI/CD. - [GraphQL](https://www.lightningjar.com/technologies/graphql): Query language enabling strongly-typed schemas and precise data fetching for APIs. - [Happy DOM](https://www.lightningjar.com/technologies/happy-dom): Fast JavaScript DOM implementation letting component and parser tests run without a browser. - [Herdr](https://www.lightningjar.com/technologies/herdr): Terminal multiplexer for orchestrating multiple coding agents, with persistent sessions and agent-state views. - [HTML](https://www.lightningjar.com/technologies/html): Semantic markup foundation for accessibility, SEO, and progressive enhancement. - [Hygraph](https://www.lightningjar.com/technologies/hygraph): GraphQL-native headless CMS for content federation and multi-site delivery. - [JavaScript (ESNext)](https://www.lightningjar.com/technologies/javascript-esnext): Modern JavaScript with modules, async/await, and optimized build tooling. - [Lighthouse CI](https://www.lightningjar.com/technologies/lighthouse-ci): Automated audits for Core Web Vitals, accessibility, and SEO with performance budgets. - [Marked](https://www.lightningjar.com/technologies/marked): Fast, spec-tested markdown compiler powering bit-identical rendering across our CMS-driven sites. - [Model Context Protocol (MCP)](https://www.lightningjar.com/technologies/model-context-protocol): Open standard connecting AI agents to tools and data; we build and run public MCP servers. - [Mosh](https://www.lightningjar.com/technologies/mosh): Mobile shell that keeps SSH sessions alive across network changes, sleep, and flaky connections. - [NanoID](https://www.lightningjar.com/technologies/nanoid): Tiny library for generating cryptographically strong, URL-friendly unique IDs. - [Node.js](https://www.lightningjar.com/technologies/node-js): Mature production runtime with deep ecosystem support for serverless and containerized workloads. - [1Password](https://www.lightningjar.com/technologies/onepassword): Secrets vault that pairs with Varlock to keep environment secrets out of plaintext files. - [OpenAI (ChatGPT / GPT models)](https://www.lightningjar.com/technologies/openai-chatgpt-gpt-models): State-of-the-art language and multimodal models for chat, content generation, and code tasks. - [OpenDXP](https://www.lightningjar.com/technologies/opendxp): Community-driven, GPLv3 fork of Pimcore Community Edition for PIM, DAM, headless CMS, and commerce. - [OpenTelemetry](https://www.lightningjar.com/technologies/opentelemetry): Vendor-neutral standard for tracing, metrics, and logging instrumentation. - [Pimcore](https://www.lightningjar.com/technologies/pimcore): Enterprise platform unifying PIM, DAM, headless CMS, and customer data capabilities. - [PlanetScale](https://www.lightningjar.com/technologies/planetscale): MySQL-compatible serverless database with non-blocking schema changes and branching workflows. - [Plausible](https://www.lightningjar.com/technologies/plausible): Lightweight, privacy-friendly web analytics for traffic and user behavior insights. - [Playwright](https://www.lightningjar.com/technologies/playwright): Cross-browser E2E testing framework with powerful auto-waiting and test isolation. - [Podman](https://www.lightningjar.com/technologies/podman): Daemonless, rootless container engine — Docker-compatible CLI without the root-owned daemon. - [Polypane](https://www.lightningjar.com/technologies/polypane): Developer browser for responsive design, accessibility audits, and performance testing. - [Renovate](https://www.lightningjar.com/technologies/renovate): Automated dependency updates with configurable scheduling, grouping, and auto-merge. - [Replicator](https://www.lightningjar.com/technologies/replicator): Our LLM-powered brand operating system: CMS, brand voice, and content APIs behind this site and client sites. - [Resend](https://www.lightningjar.com/technologies/resend): Developer-first transactional email API with React/HTML templates and strong deliverability tooling. - [Runtime Validation (Schemas at the Edges)](https://www.lightningjar.com/technologies/runtime-validation-schemas-at-the-edges): Schema-based validation for API inputs/outputs using libraries like Zod and Valibot. - [Sanity](https://www.lightningjar.com/technologies/sanity): Customizable headless CMS with real-time collaboration and GROQ query language. - [Sentry Performance + Profiling](https://www.lightningjar.com/technologies/sentry-performance-profiling): APM solution for transaction tracing, N+1 detection, and frontend-to-backend correlation. - [Sentry](https://www.lightningjar.com/technologies/sentry): Real-time error tracking and performance monitoring with source maps and session replay. - [Sharp](https://www.lightningjar.com/technologies/sharp): High-performance Node.js image processing library for resizing, optimization, and format conversion. - [Snyk](https://www.lightningjar.com/technologies/snyk): Developer security platform for dependency, code, container, and IaC vulnerabilities. - [Socket.dev](https://www.lightningjar.com/technologies/socket-dev): Software supply chain security that detects malicious and risky open-source dependencies. - [Svelte / SvelteKit](https://www.lightningjar.com/technologies/svelte-sveltekit): Reactive JavaScript framework reducing complexity with compiler-first approach and full-stack capabilities. - [Tailwind CSS](https://www.lightningjar.com/technologies/tailwind-css): Utility-first CSS framework enabling consistent design systems and rapid iteration. - [Token-based Authentication](https://www.lightningjar.com/technologies/token-based-authentication): Auth strategy using short-lived access tokens with refresh rotation for stateless scaling. - [tRPC](https://www.lightningjar.com/technologies/trpc): Type-safe RPC framework for full-stack TypeScript apps with end-to-end type inference. - [Turso (SQLite)](https://www.lightningjar.com/technologies/turso-sqlite): Distributed, edge-optimized SQLite database with global replicas for low-latency reads. - [Two-Factor Authentication (2FA)](https://www.lightningjar.com/technologies/two-factor-authentication-2fa): Account protection using TOTP apps, WebAuthn/passkeys, and backup codes. - [TypeScript](https://www.lightningjar.com/technologies/typescript): Typed superset of JavaScript enabling safer refactors and reliable API contracts. - [UnoCSS](https://www.lightningjar.com/technologies/unocss): On-demand atomic CSS engine with instant compile and flexible presets. - [Upstash](https://www.lightningjar.com/technologies/upstash): Serverless data platform offering Redis, Kafka, queues, and vector storage. - [UptimeRobot](https://www.lightningjar.com/technologies/uptimerobot): Free uptime monitoring service checking websites every minute with alerts. - [Valibot](https://www.lightningjar.com/technologies/valibot): Lean, fast schema library for parsing and validation with strong TypeScript inference. - [Varlock](https://www.lightningjar.com/technologies/varlock): Schema-driven environment variable management with validation, typing, and secret safety. - [Vercel AI Gateway](https://www.lightningjar.com/technologies/vercel-ai-gateway): Managed gateway unifying access to multiple AI model providers with observability. - [Vercel AI SDK](https://www.lightningjar.com/technologies/vercel-ai-sdk): TypeScript toolkit for building AI features with streaming UI and multi-provider support. - [Vercel Blob Storage](https://www.lightningjar.com/technologies/vercel-blob-storage): Simple, durable blob storage integrated with Vercel projects and Edge Middleware. - [Vercel](https://www.lightningjar.com/technologies/vercel): Hosting platform with preview environments, instant rollbacks, and Edge Runtime. - [Vite](https://www.lightningjar.com/technologies/vite): Fast frontend build tool powering dev servers and optimized production bundles across our projects. - [Vitest](https://www.lightningjar.com/technologies/vitest): Fast, Vite-native test runner with first-class TypeScript and ESM support. - [Vue / Nuxt](https://www.lightningjar.com/technologies/vue-nuxt): Progressive JavaScript framework with Nuxt adding routing, SSR, and file-based conventions. - [Webhooks](https://www.lightningjar.com/technologies/webhooks): Event-driven integration pattern for connecting systems and automating workflows. - [WebSockets](https://www.lightningjar.com/technologies/websockets): Protocol for low-latency, bidirectional communication in real-time applications. - [woof-editor (beta)](https://www.lightningjar.com/technologies/woof-editor): Our contenteditable markdown editor for Svelte 5, backed by barkdown's round-trip codec — WYSIWYG that never drifts on save. - [Zod](https://www.lightningjar.com/technologies/zod): Popular schema validator with excellent developer experience and ecosystem integrations. ## Feeds - [Feed index](https://www.lightningjar.com/feeds): all feeds, described - [Combined feed — everything](https://www.lightningjar.com/atom.xml) - [Blog feed](https://www.lightningjar.com/blog/atom.xml) - [Customer Stories feed](https://www.lightningjar.com/customer-stories/atom.xml) - [Reading List feed](https://www.lightningjar.com/reading-list/atom.xml) - [Barkup Bench research feed](https://www.lightningjar.com/research/barkup-bench/atom.xml)