Skip to content

Building in public

What we’ve shipped

Qiksy is a small studio building AI-native micro-tools — in the open. Every new tool, real bit of progress and the occasional fix lands here first. No hype, just what changed.

  1. CalmFixed

    The birds sang without pause, from one fixed spot

    Daytime birds and the dawn chorus ran as an unbroken layer, always at the same distance and the same place in the stereo picture, so what you actually heard was a pattern repeating. Birds do not do that. The distinction that was missing is between a surrounding and a creature. Crickets, cicadas, a brook, rain, wind genuinely are continuous: there are thousands of sources and not one of them is separable. Birds come in ones, each is heard on its own, and so each has an arrival, a song and a departure. Those two layers now work that way. Each of their two voices keeps its own cycle — quiet for seven to twenty seconds, singing for nine to twenty-four, quiet again — and the cycles are independent, so sometimes two overlap and sometimes there is real silence. While a voice is quiet it is given a new place in the stereo picture and a new speed, which is heard as another bird settling somewhere else rather than the same phrase again. Nothing changed for rain, wind or the brook, which were right as they were.

  2. CalmFixed

    Forty-four silhouettes, and now each one says what it is

    The valley is populated by pressing little drawings, and a badger in outline is not a badger to anybody. Each tile did carry its name, but only in the browser’s own tooltip: it waits about a second, is drawn in the system font rather than the studio’s, and on a number of setups never appears at all. The tiles now use the same hint the rest of the studio uses, which shows straight away and looks like everything else. Hints are for a mouse. On a touch screen they stay off on purpose — a bubble left behind after a tap is litter on a small screen — and the name is on the tile for a screen reader either way.

  3. CalmFixed

    The rain went quiet twice a minute, and you could hear where the recording joined

    Background layers — rain, wind, a brook — loop, and the loop was audible: a moment of almost-silence, then the sound again. Two separate faults, both in the machinery meant to hide the join. Each layer plays as two voices spread apart for width, and the two were cross-faded against each other so that whichever one was at its join would be turned down. Adding two unrelated sounds does not work that way: half of one plus half of the other is three decibels quieter than either at full, so the crossfade itself was the dip, twice every loop. And it was aimed at the wrong moment anyway — the two voices run at slightly different speeds, so their joins drift, while the fade was timed off the scene clock and hit them only by accident. The join is now closed inside the recording instead of over it: its tail is mixed into its own head once, when the layer is built, so the sound meets itself exactly. The voices then simply hold steady. Measured on the real files, the seam on the bare-wind layer was six times the size of an ordinary step between neighbouring samples; it is now the size of an ordinary one.

  4. CalmFixed

    An iPhone was playing none of it — the side switch was silencing the whole page

    Sound on an iPhone was simply absent: no animals, no weather, no melody. The cause is a rule of the phone rather than a bug in the page. Safari files a page’s Web Audio under the ringer, so the little switch on the side of the phone — the one people leave on for meetings and forget — mutes it along with the ringtone. Meanwhile the same person has music playing in their headphones and every reason to think their sound is fine. There is an official way to say «this is playback, not a ringtone», and the page was already using it — but it only exists from iOS 17, and even there it does not always carry. What does carry, on every version, is an audio track that is actually playing: while one is running, the phone files the whole page as playback. So the page now keeps four tenths of a second of silence looping, seven hundred bytes of it, for as long as the sound is switched on. Switch the sound off and it stops — otherwise the phone would keep showing a silent site on the lock screen as if it were a song.

  5. StudioFixed

    On an iPhone the menu would not close, and the contact form opened see-through

    Two faults on the phone, one cause between them. Safari on iOS only sends mouse and click events from an element it judges to be clickable, and a plain overlay is not one. So tapping beside the open menu did nothing at all — the menu stayed put, with no way out of it — and tapping outside the contact form did not close that either. Both now listen for the press itself rather than for a click Safari may never send. The contact form also opened transparent, with the page showing straight through it. Its entrance animation faded the whole card in, and under an iOS blur that fade can stall partway, leaving a half-visible window and nothing the reader can do about it. The card no longer animates its own transparency, and its background is now declared twice, so a colour the browser cannot work out leaves a plain one standing instead of nothing.

  6. Legato · CalmFixed

    The six background melodies stopped throbbing, and moved further off

    The melodies you can put behind your reading — pentatonic, raga, hang, Japanese, choral, singing bowls — had an unpleasant wobble on every long note, and they sat closer than they should. The wobble was beating. Each mode carried a partial almost in unison with the note (1.004 to 1.011 times its pitch) at almost the same loudness, and two close frequencies at equal loudness swing the sound in and out by 99 percent. The ear does not hear that as shimmer, it hears it as out of tune. Those partials are quieter now, so the swing is half to three quarters instead of all of it. The singing bowls keep more of theirs than the rest: the beating is what makes a bowl a bowl. Distance is not one number either. Turning only the volume down gives you the same music beside your ear, played softly. So the melody is quieter, darker at the top, arrives more by reflection than directly, and starts a little later than the sound around it — which is what far away is actually made of.

  7. StudioShipped

    The About page now says where we are from, instead of what we are living through

    The page used to mention that the work happens during a war, and then said nothing else about the country. That is a poor trade: it asks for sympathy and tells you nothing you can use. It has been replaced by a section about Ukraine — the largest country entirely within Europe, with a software industry among the biggest on the continent, the first state to give a digital passport the same legal standing as the paper one, and the place the tune you know as «Carol of the Bells» was written in 1916 as Leontovych’s «Shchedryk». That carol is on the page now, with folk ornament drawn alongside it — kalyna, the endless line, a paper-cut. It does not start by itself: you press play, and there is a button to stop it. Autoplaying audio is a plain accessibility failure (WCAG 1.4.2), and a studio that sells accessibility tools does not get to make that mistake on its own About page. One fix that reaches further than this page: Tailwind’s reset was flattening every heading weight to normal across all five legal pages, so a top-level heading and a section heading read as the same thing. They have their own weights back.

  8. LegatoNew

    Legato 0.3.88 — the thirty steps you walk every month, walked for you

    Paying a utility bill, ordering the same groceries, sending a meter reading: thirty or forty steps walked by touch every single time, because the layout cannot be seen and a screen reader remembers nothing between visits. Walk that path once with the recording on, give it a name, and from then on the browser leads — it opens the pages, presses what you pressed and fills what you filled. It is a guide, not an autopilot. It knows the way; it does not know the decisions. So it stops at every place where you are needed — a password, a sum, a code from a text message — and it never presses what cannot be undone. Passwords are not stored at all: it stands on the field, says that your password goes here, and waits. A routine can be saved to a file and handed to somebody else; the file holds the path and nothing you typed into it. Sites get rebuilt, and a routine recorded in March can stop in April when “Pay” becomes “Go to payment”. The browser used to stop dead there. Now it can name the closest thing it found and ask whether to use it — it asks, you decide, and it still refuses to press anything irreversible. One fix that mattered for sighted people: the browser announced that a screen reader was running when none was. It asked a flag that only means somebody requested the accessibility tree — a debugger or an automation tool will do — and the flag never went back down. It now asks the system itself, on macOS, Windows and Linux. And the Atmosphere got quieter in the right way. Four background recordings were made again; the old wind was not louder than the rain, it was hissier, and a broad hiss is heard as something right beside your ear however far you turn it down. Rare voices also stopped arriving on a beat — an even interval is worked out by the ear after three repeats, and after that you are waiting for the next one, which is your attention taken.

  9. JigNew

    Jig 1.4.3 — a blind auditor can now reach the violation, not only hear it named

    An accessibility audit names what is wrong, and for someone who cannot see the screen that is where the work used to stop. They heard «two blocking issues» and had no way to get to them: between the list and the element on the page there was nothing. Findings now sit in a list one at a time, and Enter takes you to the finding on the page itself. About half of them are nodes that cannot take keyboard focus at all — an image with no alternative text, a heading at the wrong level, a table cell. Giving those a tab stop would change the page under test, which is the very thing the auditor is measuring, so instead such a node says the way to itself out loud: which landmark it sits in, and which tab stop comes after it. Measured on real NVDA on Windows, the sentence reads: «h4 — not a tab stop. It sits in main. Nearest stop after it: 39 of 55.» Coming back works too. The panel key pressed from inside the page used to close the report — people press it to return to the list, so now it only ever takes you in. Separately: settings, open tabs, window size, connected servers and the mailbox were written straight over the live file and silently fell back to defaults if the file could not be read. An interrupted write lost all of it without a trace. Writes are atomic now, and an unreadable file is kept aside instead of being overwritten. Sites behind Cloudflare also stopped refusing Jig — including w3.org, the source of the accessibility rules themselves.

  10. CalmFixed

    The valley has seventy-four voices, and now says so

    The voice board announced forty-four while the valley had long had seventy-four. On a phone the valley was silent altogether, and the board drew squashed squares instead of tiles. A yard you have built can now be saved under a name and brought back with one press, so the one you liked is no longer lost the moment you make another. The beast’s volume is set from the recording itself rather than from a guess.

  11. LegatoShipped

    The manual now covers Atmosphere, and says the Windows keys once instead of never

    The reference at qiksy.app/legato/docs described four things on the browser’s fun shelf and left out the fifth. Atmosphere shipped, was written up in the release notes, and then had nowhere that said where it lives, what the three buttons above the list do, or that the sound keeps playing after you close the page it was chosen on. It has its own entry now. The same page named fifty keyboard shortcuts and gave the Windows equivalent for five of them. Every one of the browser’s sixty-eight shortcuts is bound as Cmd-or-Ctrl, with no exceptions, so the rule is now stated once at the top — where this says Cmd, Windows and Linux use Ctrl in the same place — and the brackets after individual shortcuts are gone. Read out loud, those brackets doubled the length of every instruction. Inside the browser, the Help menu now has a way in: How to Use Legato opens the manual in the browser’s own language. Until today it had no link to it at all, so the only way to find a hundred pages of instructions was to happen upon the website. The release notes page also gained a version index, and the paragraphs across the Legato pages are no longer capped at a narrow reading measure. All of that is now in every one of the twenty-five languages the manual is written in, not only in English. The translated files are positional, so a section added in the middle could not simply be topped up — all twenty-four were built again.

  12. LegatoNew

    Legato 0.3.87 — a place to sit in, and a card number that is no longer read out loud

    Two things were broken and are now fixed. A card number typed into a checkout form was read aloud and written into the browser’s own notes: only fields marked as passwords were masked, and card fields are not. They are masked now, by name and by the browser’s autocomplete hint, in the reading and in what is stored. And a slider — volume, speech rate, zoom — said nothing at all while you dragged it with the mouse; the value only arrived when you let go, which is the one moment it is no longer useful. It now names the value as you move, starting from where you grabbed it. The new part is Atmosphere: eighty-three recordings — rain, a brook, wind, crickets, an owl somewhere far off, animals from a farmyard and from far away — that play quietly while you read and go quiet while the browser speaks. Press one and you hear it once, close and clear, which is also how a child can learn what a cow or a lion sounds like. One button assembles a set from your own clock and keeps following it: dawn birds in the morning, crickets and an owl at night. We never ask where you are — the clock already knows your time zone. Six melodies are made up as they go, so they never repeat and never end. Your own sets can be saved by name. Reading also got two things it lacked: a list of the page’s headings you can jump from, and a shelf of what you started reading and did not finish.

  13. JigShipped

    Jig 1.4.2 — a working day driven with the keyboard alone, and an audit that can be handed to a client

    This release was written against a screen reader rather than a checklist. Moving between the page under test and Jig is now one key that swings back to where you were, the focus returns to the control that opened a panel instead of the top of the window, reading mode belongs to the file it was started in and steps aside when you leave, and the shortcut list says how to get out of itself — NVDA keeps Escape for its own use, so a dialog that only closes on Escape does not close at all. More than half of the spoken announcements used to interrupt each other mid-word; they now wait their turn. On the audit side a WCAG criterion number now reaches the finding it belongs to, a defect found in somebody else’s embedded banner no longer leaves as a defect of the client’s site, and the audit no longer reports as satisfied the very criterion it just found broken. For teams: what Jig remembers about widgets can now be carried between machines without the client’s internal host names leaving the building — or, with a company exchange address, without leaving the company network at all; every verb the assistant runs is written to a local, non-optional action log that keeps no query strings; and reports and Jira tickets can now be taken from an editor rather than only from the dialog in front of a person. The first screen now also asks how you prefer to work — screen and mouse, with a screen reader, or poor sight — and turns on what that answer needs, because a switch nobody knows about does not exist. On the download page every row of buttons now offers the Microsoft Store beside the direct installer: the direct file meets a Windows warning screen, the Store package is signed by Microsoft and does not.

  14. QiksyShipped

    A Qiksy link sent into a chat now looks like the product it opens

    Every landing had a link preview, and every preview was a photograph of its own first screen. That answered "what am I about to open" with the look of the page, which is honest but not recognisable: at the size a chat draws a card, one dark hero looks much like another. All nineteen are now the branded card the videos open with — the mark, the name, one line about the product and the address. The two products a person installs rather than visits carry no prefix: Legato comes with its own mark, and Jig with its own name, because that is what they are called. The lines on the cards were not written for the occasion — each is the sentence the catalogue and the studio already use, so a card cannot promise something the product page does not.

  15. Qiksy BridgeNew

    A link you can send to one particular person — and every preview picture re-shot

    The Bridge landing already read four ways, but only for a human who clicked: a query string cannot carry a title or a picture into a chat, because Telegram, Slack and LinkedIn read the HTML of the first response and run no JavaScript at all. So each reading now has an address of its own — /qa-copilot/for-developers/, /for-manual-testing/, /for-automation/, /for-accessibility/ — with its own head, its own preview picture and its own line in the sitemap, the same machinery the Jig landing has. The page reads the profession from the path before the query and before what it remembered, because the path is what the crawler was served. And while we were there: every link-preview picture on the site was a photograph from 14 August, taken before half of this year’s heroes existed. All twenty were re-shot, plus the catalogue card for Bridge, which was still showing a headline the product no longer uses.

  16. Qiksy BridgeNew

    The page now asks what you do, and answers that question instead of the average one

    One product genuinely answers four different questions, and a single headline can only answer one of them: a developer wants the agent in the tab they are already signed into, someone testing by hand wants thirty fields filled in one press, an automation engineer wants the runs a script cannot reach, and an accessibility auditor wants the page as a screen reader actually receives it. Above the headline there are now four chips — the same idea the Jig landing has had for a week — and picking one swaps the headline, the lead and the accent colour of the page. The choice is read before the first paint, so nothing swaps in front of you, and it is remembered, and a link can carry it: ?for=coder, ?for=manual, ?for=sdet, ?for=access. Written in all seven languages rather than English with six machine copies. The old "Build FAST · Test SMART" badge came off the hero while we were there: the same line already sits in the footer, and two rows of pills above one headline were arguing with each other.

  17. Qiksy BridgeShipped

    QA Copilot is now Qiksy Bridge, and the pages finally say so

    The extension was renamed in the Chrome Web Store and passed review, but the landing and the documentation kept the old name — including the documentation page we link in every letter we send, which greeted people with a product they could no longer find in the store. Both now read Qiksy Bridge, in all seven languages. The word "copilot" is gone from the copy as well: it was the reason for the rename in the first place, so leaving it as a figure of speech on the first screen made no sense. The documentation header also carries the real Qiksy logo now, instead of a lightning bolt drawn inline in the markup that matched nothing else we ship.

  18. LegatoFixed

    Two switches promised silence and did not deliver it, and without sight you cannot catch that

    A switch that does not switch the thing off is worse than no switch at all: you turn it off, hear the same phrase again, and the only conclusion available to you is that you pressed the wrong thing. "Announce repair status out loud" silenced five neighbouring announcements and never the one named under it — the phrase was built in one place and read out in another, and the second place had never heard of the setting. The tick that steps you through the page menu ignored the sound switch entirely, so turning sound off in a library or beside a sleeping child still left you hearing it. Both are fixed, and so are two more places where the browser talked into an empty room: Control now clears the announcements a page had queued, instead of falling silent and then speaking again a second and a half later, and a background tab no longer chimes at you from a page you are not reading. You can also ask a site which words you gave it — naming someone else’s button "the cart" has worked for a while, but forgetting your own word got you "nothing here is called the cart", which tells the person who did the naming that the work never happened. An unfinished postcard now survives the tab it was written in. And the seam between the pieces of a spoken phrase is even, so the voice stops going in jerks where nothing was wrong with the page.

  19. QA CopilotShipped

    The extension changed its name, because the old one put it on a shelf with nothing on it

    It is called Qiksy Bridge now, and the store title says what it does: a browser MCP extension for Claude, Cursor and Codex. The old name led with manual QA, and the page led with it too — so people read it as a form filler and left. The bridge, which is the whole point, was the hundred and first word; MCP was the six hundred and sixty-eighth. We measured before renaming rather than after: the store search for "qa copilot" carries sixty-two installs across six cards, thirteen of them ours, while the search for "mcp" carries around a hundred and twenty-six thousand. Our own phrases for what we do — "use my logged in browser", "existing chrome session" — return no search suggestions at all. Nobody types them. The front page now opens with the thing itself: an MCP server for the tab you already have open, with your session and your logins, and the honest difference from Playwright MCP, which starts an empty browser and signs in from scratch. Nothing about the product changed, and the extension keeps working with no agent at all. The new listing is with Google for review.

  20. LegatoShipped

    The Legato reference now speaks the twenty-five languages the browser does

    The feature reference was English only while the landing beside it shipped in twenty-five languages, and the gap was not a matter of politeness: a screen reader picks its voice from the page’s declared language, so English text under a Polish or Japanese code is read through the wrong phonetics. Somebody could read why the browser exists in their own language and hit a wall the moment they wanted to know how it works. The page also doubled — twelve sections to twenty-two — because a good deal of the browser had never been written down: reading a page with the arrow keys existed only as one line in a table of shortcuts, and copying a piece of a page, the mouse wheel that walks instead of scrolling, the shelf of games, the shop card, the braille setting and the seventeen page fixes for low vision were not there at all. Two faults turned up in the translating and both were the same shape. The browser says «reader» out loud in Russian and the translation wrote the technical loanword instead — correct, and a different word for the same thing than the one the product uses. And the page quotes seventy-five menu items while promising you will find them under exactly that name: agreement ran from 38 % in Japanese to 70 % in Hungarian, so a sighted reader would have checked against the screen in a second and a blind one would have hunted for an item that is not there. Both are now taken from the browser’s own dictionary rather than translated afresh, agreement is 96–100 %, and a gate holds it there.

  21. LegatoNew

    Copying a piece of a page, without being able to see where the piece ends

    Selecting text is a mouse gesture, and every workaround a blind person has for it is awkward: a text cursor whose keys clash with reading, the screen reader’s own markers, or select-all — which takes the menu and the cookie notice too. None of the three tells you what you took; you find that out after pasting it somewhere else. Legato 0.3.84 answers the copy shortcut itself, and only when nothing on the page is selected, so the ordinary behaviour is untouched. Draw a frame with the mouse around a piece and it works out the block from what fell inside — no need to hit the edges of a paragraph you cannot see. Or press S where the piece starts, walk to where it ends, and copy. Then it reads back what it took: a short piece in full, a long one by its first words and its last, which answers both “is this the right piece” and “did I take too much”. While a start is marked, each step makes a quiet click — the mark is alive and the step counted. The same release fixes something the work uncovered: on a page that grew above where you were standing, the down arrow moved you up.

  22. RouteFixed

    The globe on the Route page did not exist for a screen reader

    The planet is the first thing on that page, you can click cities on it and watch a route stretch between them — and to a screen reader it was nothing at all: a canvas marked as decoration, on the grounds that the city names underneath were being read out anyway. Those names were, but the thing itself was not, so someone listening heard “Kyiv to Barcelona” arrive from nowhere. It is now described the way a person would describe it: a planet turning slowly, blue water, milk-coloured land, and no continents or borders drawn on it — one Earth, the same for everyone. The description also names what is missing rather than leaving it to be discovered. And the cities are reachable now: the same ones the globe shows are real buttons, one stop on the keyboard route with the arrow keys moving between them, invisible until focus lands on one. They call exactly the code a mouse click calls, so both ways of picking a route can never drift apart.

  23. LegatoShipped

    Every Legato release that ever reached anyone is now written down

    The notes page went from eleven versions to twenty — all the way back to 0.3.52, published on 19 August 2026, which is the first build that reached a person at all. Nothing is missing before it, and the page says so instead of trailing off. Versions that were built and handed to nobody are named and excluded, because they are not part of what anyone has. The biggest entry is 0.3.64 — two hundred and forty-nine changes, and the release where the browser stopped only reading pages out and started having things to do in it: a shelf of games with backgammon built to be played by ear (both dice in one keypress, a refused move that explains itself, network play that Windows and a Mac completed against each other), a family tree walked with the keys, routes that replay a path through a site, and a large-text switch. Forty-six topics and a hundred and fifty-one lines in total, each one traceable to a build somebody actually received.

  24. LegatoFixed

    The lower half of the landing page now uses the width it was given

    Those sections ran in a column narrower than the header above them, with the right third of the page empty. They are on the full container width now — the same line the header sits on. The width went to the BLOCKS rather than to the prose: what Windows and what macOS say on first launch now stand side by side instead of one under the other, the three checksums are three cards in a row, and the list of what the browser cannot do runs three across. Paragraphs keep their reading measure of about 65 characters, deliberately — filling 1080 pixels with prose would mean lines of a hundred and fifty characters, and this is a page for people with low vision. So the page fills its width without a single line getting longer.

  25. LegatoFixed

    The lower half of the landing page looked like a column had fallen off

    It had two faults and they compounded. The narrow column — six consecutive sections, everything from "How to install" down — was pinned to the left edge of the wide container, on the reasoning that a centred column would make the text jump sideways while scrolling. True, but the price was worse: the whole bottom of the page sat against the left edge with the right third empty. It is centred now, and the jump happens twice, at the two joins, instead of being permanent. The second fault was inside that column: it was 680px wide while the text in it is capped at 68 characters — measured live, 476px — so cards and quote rules ran two hundred pixels past their own content. The container now sits on the width that actually lives in it; the line length did not change by a single character. And one section had a short note beside a tall column of text, leaving six hundred pixels of nothing under it; the note is centred in its column now and reads as the aside it is.