Back

What’s new

Every change to Tradesman, and why — 1,453 of them so far, newest first.

Sunday, November 1, 2026

When a tour doesn’t build, the app says what happened and what to do

A walk whose tour failed used to read one cut line — “The tour didn’t build · No tour — The…” — and a press flashed the shop PC’s words for four seconds. Someone who can’t ask the developer was stuck there.

Read the rest · 2 more paragraphs

Now a press on a failed walk opens a small sheet with the whole message and one key the shop PC chose: bring the file in from the X5 again, ask the shop PC again, or walk it again.

The first case is new: a file copied off the X5 while it was still recording has no index, so the engine cannot read it and asking again can never help. The shop PC now says exactly that, and the key opens Walk so the full recording can be brought in from the camera’s card.

Saturday, October 31, 2026

Build 11 (test): the phone says the X5 can go off only once the camera has closed the file

The owner's Halloween walk, the first real run of Stop-is-the-last-press: he pressed Stop, the app said the X5 could go off, he turned it off and pocketed the phone — and the shop PC could not read the 952 MB file ("ffprobe cannot read any video"). The copy's end test was a file size that held still for 1.4 s; the camera was still closing the file, so the copy re-read a head whose mdat box was still unsized and had no index, and said done.

Read the rest · 2 more paragraphs

Now the copy is final only when the re-read head says so — a sized mdat with the index after it — else it keeps waiting for the camera to close the file (up to its 90 s, then the road after Stop copies it whole). The original is still on his card; the X5 closed it after the copy had already left.

A TEST build, not the update notice: builds/test/b11.apk.

The app's name is the way home

The owner: "allow the logo to take the user home". The word Tradesman at the top of the front and the Record is a link to the landing (/?home=1), where the free engine's release is linked; its Open the app comes back.

The landing links the free engine's newest release

Release night: shop-tour, the open-source engine that turns a 360 walk into a tour, is public with its first release (v0.1.0). The landing's line under the demo now says "Free open-source engine ›" in ink and opens github.com/K-rown/shop-tour/releases/latest, which GitHub keeps on the newest release. The page still fits one screen at 412 and 360.

"You're here" is the nearest job, off a fix good to 100 m; the shop PC card says why a walk waits and when it starts

The owner, on the new front: HERE sat on a job he was not at. The front picked the job worked last among every job within 150 m of his fix, while the Jobs page and the capture picker meant the nearest — and a computer's fix (Wi-Fi or IP) can be kilometres off. Now one job is HERE, the nearest, and only when the fix is good to 100 m; the lists still sort by any fix.

Read the rest · 1 more paragraph

And: the shop PC card said only "1 in line" while the box sat resting after its memory ran out. The box now reports its rest and when it ends in its heartbeat, and the card says "resting after its memory ran out — starts again 8:01 PM", or "starting it now".

The app calls no model: the photo read, the record's own ask and the X5 screen read are off for everyone

The owner, on release night: "remove all of these so there's no Claude API running that strangers can rack up." Every photo that landed was read by Claude on Tradesman's key (about 1.5 cents each), a question to the record through tradesman_ask cost 5 to 9 cents, and the X5's Wi-Fi screen read a few cents — for any signed-in account. All three are off, for every account, his included.

Read the rest · 2 more paragraphs

A person's own Claude still reads their record through the connector, on their own plan — search, a day with its photographs, a 360 walk frame by frame. tradesman_ask now says so instead of answering. The camera form loses its Scan key; the Wi-Fi name and password are typed.

The code is kept behind one switch (TRADESMAN_APP_MODEL=on, and NEXT_PUBLIC_TRADESMAN_APP_MODEL=on for the Scan key) that turns it back on for everyone at once. Batches already out are still collected; nothing new is sent.

The front and a job's page, as mocked: round pictures, the job you're at on top, one red key for a walk

The owner looked at mocks of the front and a job's page tonight and said "they're dope, implement them." This is that build.

Read the rest · 4 more paragraphs

The front: each job is one row with a round picture — its newest walk — and one line under its name (when it was worked, how many walks), then its newest photos as small circles ending in "+N". The job you are standing at leaves the list for its own spot at the top, "You're here", with a bigger ball, a HERE tag and how many walks it has; while its tour is on the way it wears the same four step dots the Walk page shows (the X5, the phone, the shop PC, the tour) and a ring of how far along it is. Held stops show as one amber line. The shop PC is one card at the top when it is busy. New job and Unfiled share the last row.

A job's page now opens on one big round picture of its newest tour, the walk count on it and a "Walk the tour" key under it, then the job's name large and one line. The address, Directions, who is on it and its docs are chips under the name. Each day is one row: its walk's ball (greyed with a ring while the tour is on the way, an empty glass ball on a day with no walk), the date and the walks' times, the step dots while it builds, one line, the day's photos as circles, and Claude at the right.

The dock is one big red key for a 360 walk, with Photo beside it and Upload (on the front) or Note (on a job's page). The word under the red key — "Walk Redland", "Walk it again" — names where the walk goes; pressing that word opens every way to capture and the job and day picker, so nothing the old key did is gone.

Not done: nothing here has met his phone. The front's here-spot shows the step dots only for walks on the shop PC (a walk on his own computer has no dots yet). The tour viewer's mock is another build.

Nobody gets more: no daily caps, no owner first on the shop PC — one size limit for everyone

The owner, on release night: "this app isn't for me, it's for the world." Round 2 had given his account unlimited model reads, questions, map pictures and address searches while everyone else had a daily allowance, and had put his walks ahead of everyone else's on the shop PC. Both are gone.

Read the rest · 2 more paragraphs

What stays is one upload size limit, the same for every account: a photo 4.4 MB, a clip 300 MB, a PDF 25 MB, a 360 walk 6 GB. The shop PC builds walks in the order it always did, nobody first.

The engine, shop-tour, is public the same night as a clean single-commit export; its old history stays private.

The front door, read as a stranger

We walked the live site the way someone who has never heard of Tradesman would: the landing and its demo tour, Get the app, Privacy, How it works, What’s new, sign-in, the shop PC page and a page that does not exist — on two phone sizes, light and dark, and a desktop.

Read the rest · 3 more paragraphs

The landing promised a floor plan, a dollhouse and a tour. The plan and the dollhouse have been off the glass since Oct 28 until they are good enough, so the sentence now says what you get today: a tour of the whole job.

The demo tour asked storage for a photo list it does not have on every open, and that showed as an error in the browser on the front page. A tour with no photos pinned to it now answers that question itself — nothing goes out, nothing fails.

The shop PC page named the engine by our private build name and had no way back. It now says in plain words what that computer does — builds every 360 tour, faces, plates and printed names blurred first — with a way home.

The test suite, read against today's app: four small things it found, fixed

The full suite of 1,485 tests ran against main and 273 failed. Most were tests that still looked for September's screens: a job's page drew its days as day sections with groups and trays until 10-27 and draws them as blocks now; the tools, 3D and 4D are off the glass since 10-28; the front has no search key since 10-26. Those tests now read the app as it is, each with a MOVED note. docs/release/TEST_TRIAGE.md lists every one.

Read the rest · 1 more paragraph

Four were the app. A job with days and no job doc yet had no way to keep its first doc — the day's + that held it left on 10-30 and the Docs section draws nothing until there is one — so the job's ⋯ says Add a job doc again until the first is kept. On the front, holding a photo to pick it slid the whole day up the page by the job list's height, because the list stepped aside; now it stays where it was, dimmed and out of reach, while he picks. A shared day's groups sat 6 px in from the loose photos beside them. And the words Walked twice on an opened day were a 20 px press beside the 96 px ball — words now; the ball and the time pills are the presses.

A free day has limits for everyone but the owner — reads, questions, map pictures and address searches, and the biggest file each upload takes

The app opens to strangers tonight, and every photo read, every question to the record, every satellite still and every paid address search is paid for on Tradesman's own keys. So an account that is not the owner's now has a daily allowance of each — 100 photo reads, 20 questions, 10 camera-screen reads, 60 map pictures, 40 paid address searches — counted off the ledger since midnight Eastern. Past it the answer says so in plain words: "You’ve used today’s free reads — they come back tomorrow." A photo that was not read waits and is read by the nightly sweep; an address search goes on with the free map.

Read the rest · 2 more paragraphs

The nightly sweep shares the night fairly: the owner's owed photos first, every one, then at most 60 of each other account's. The X5 screen reader used to call Claude for anyone who asked; it needs a sign-in now.

Uploads know their size for everyone but the owner: a phone clip up to 300 MB, a 360 walk up to 6 GB (the one-piece link, the multipart parts and the finished object are each checked; an object over the cap is taken back). Photos (4.4 MB) and PDFs (25 MB) were capped for everyone already. Nothing the owner does changes.

Before the code goes public: every walk door checks whose walk it is

A review of all 93 routes for one question: does every id a request names belong to the person asking? Most did. Eight did not, and all eight were about 360 walks: the shop PC's webhook took anyone's word for a walk's status, three doors handed out any walk's whole row or its raw footage to whoever had its id, one told anyone where the newest live walker was standing, and the walk upload made walks on any job named, with no sign-in. Reading the camera's Wi-Fi screen called Claude for anyone.

Read the rest · 1 more paragraph

Now each asks the shop PC's key or his own session, and a walk is read only by the people on its job. The shop PC signs its calls and never follows a redirect with its key. Nothing changes on his phone. What was left as a judgement call is written down in docs/release/SECURITY_REVIEW.md.

Build 10 (test): the walk is sent on the network that really has internet, and it says why when it cannot

On build 8 at the shop the phone had the whole walk copied off the X5 while it recorded, and not one byte of it went up until after Stop. The relay and the copy after Stop sent everything fine on the same phone — they send on whichever network Android says really has internet. The upload while he walks used the raw cellular handle instead, the shop's one-bar LTE, and gave up after three tries without saying a word.

Read the rest · 3 more paragraphs

Now it sends the way the relay does: on validated internet (the shop Wi-Fi beside the camera's, or real cellular), then the cellular handle, then the default route, trying again with a pause between. When it cannot, the Walk page writes down why ("upload off: …") in its ledger row, and a row lands the moment the first part is up.

Build 9 threw the whole upload away at Stop because the X5 writes the file's first bytes last. Build 10 sends part 1 again with the real head and keeps everything else that already went up.

This is a TEST build, not the update notice: builds/test/b10.apk. A fast 8K walk writes about 15 MB a second, more than any phone uploads, so at Stop part of it is still going — the head start is the point.

Friday, October 30, 2026

The Walk page is pictures now: one big record key, and every walk shows four dots — the X5, the phone, the shop PC, the tour

You said the Walk page was a mess: lots of words, and you had to piece together what was going on. It is drawn now, the way you approved the mock tonight. Ready: whether the X5 is ready (or one key to connect it), one big red record key, and three small pills for the job, the day and Import.

Read the rest · 3 more paragraphs

Under it, each of your walks is its round picture with a ring for how far along it is, the time, and four dots: the X5, the phone, the shop PC and the tour. Done dots are dark, the one happening now is blue, the ones to come are grey. One short line says the rest: Copying 37%, In line, Building the tour 8 min, 2 stops need your eye (press it to review), or Tour ready with an Open key that opens the tour right there.

Recording is the clock, a red Recording, the stop key and one card saying how much of the walk is already saved to your phone. After Stop, a big green card says X5 can go off only when that is true: the file is whole on the phone or off the card. Until then an amber card says Keep the X5 on, with the copy percent. Then Record another.

Everything under it works as before: the copy still starts the moment you stop, the tail still writes down what it did, review and Import are the same. The long shop PC line is gone from this page; each walk's dots carry it, and only an off shop PC gets one small grey line.

What the walk sent while he recorded is written down

The first walk on build 7 at the shop fell back to copying the camera file after Stop, so the X5 had to stay on for about two minutes. The phone never said why the send-while-recording gave up.

Read the rest · 1 more paragraph

Now every change in what the phone does with the camera file while he records is one ledger row (x5.cardTail) with its reason, and a walk saved with no word from it at all is one too. The next walk tells us which side failed.

A tour opened in the app fills the glass again — it was drawing into a box 0 px tall

The black tour was ours. When the tour glass learned the day's times (a row of pills for a place walked more than once), its grid gained a row — and on a walk with one time, the tour's own box fell into that empty row, which is as tall as what is in it: nothing. The page loaded and drew into a frame 0 px high, so the glass stayed black. The tour's box now names its row, and a spec measures the frame at more than 60% of the glass.

Read the rest · 2 more paragraphs

While a tour loads, the glass shows the tour's own picture (the small cut the Record already holds paints at once, a sharper one over it) under "Loading the tour…" — never black. A tour that will not load shows its picture dimmed behind the words, with Try again first and Open in your browser beside it.

Smaller things on the daily path: the tour's header says "22 spots · 2 floors" and stands whole (on a small phone Share is its mark alone); an opened day walked twice says "Walked twice", never "2 360 walks"; a day's line says "1 photo · 1 walk"; on the Walk page "on" and the day wrap together, and "Saved to <job>" comes before the copy's progress.

The public pages, read as a stranger the night before release

Every page a stranger can open without an account — the front door, the shared tour, How it works, Privacy, Get the app, sign in and sign up — was walked at a phone in light, a small phone in dark and a desktop, with every control measured and every console line read.

Read the rest · 3 more paragraphs

How it works still described the September app: a Jobs tab, Note, Voice and Link on the shutter, a Tools key and 3D drawings that are no longer on the glass. It is rewritten for the app as it is — the 360 walk first, then photos, your jobs as days with their tours, sharing a tour, Claude, your crew, and that the record is yours — and it names only keys you can see.

The front door had no way to How it works or Privacy; both now sit on the engine line, so the page still fits one screen. Sign in and sign up spoke of photos and notes only; they now say what the app makes — the tour — and keep every photo.

A shared tour of a walk with no name read "360 tour" over "Vitronic · 360 tour": the job is its title now, said once. Its foot held a link inside the phone's bottom strip; the mark at the top is the way to Tradesman. The tour frames lost a duplicate fullscreen attribute every browser warned about, and Privacy no longer names a picture-of-tasks reader that was taken out with the tasks.

The 'nothing drew' card no longer covers a tour that drew

The 15-second clock behind the stuck card was never cancelled once the frame loaded, so it fired over a tour that was already on the glass. It is cleared on load now, and the card is drawn only while the frame is still loading.

The tour's map knows the walk, opens big on a tap, and the tour can walk itself

On the Vitronic tour the owner said the small map was the most useful thing on the glass, and that it did not show the path he walked. The engine already had that path: a camera position for every second of the walk, used to place stops the map could not. It is now laid onto the tour's map and shipped with every tour, drawn as a solid line under the stops.

Read the rest · 2 more paragraphs

A tap on the small map opens the same map over the whole glass, every stop numbered, the ones he can walk to from here brighter, the view cone where he looks; a tap on a stop glides there. A Play key walks the tour by itself, stop by stop, turning to face the way it goes; any touch stops it.

Found on the way: a page or a tour.json re-served into a live tour's folder was not reaching the app for an hour or more, because the storage kept the old copy under its bare name. The app now asks for the page with a mark that changes every minute, and the viewer's own reads of tour.json carry the same mark, so a re-served tour lands within a minute.

A tour that will not draw says why, and opens outside the frame

The owner opened his new tour in the app and saw a black screen; the same page drew in a browser. The frame had no words for that: a request that died under the app (the phone still bound to the camera’s Wi-Fi with the X5 off, or no signal) was ignored unless the phone called itself offline, and a frame that never loaded sat black for ever. Now a dead request is said in words with the way out, a frame with no load after 15 seconds says so, and the tour’s own link opens in the phone’s browser from a key on the glass. Every open writes one ledger row with what happened, so the owner never has to describe a black screen again. The service worker never stores a tour’s or a drawing’s page, and the engine’s viewer says it when a screen cannot make a 3D context instead of going black.

The walk is sent to the record while you record — build 7

The owner: "I need it to take single-digit minutes or seconds." After this morning’s walk the biggest wait was the phone sending a 3.9 GB file after Stop. Build 5 already copied the walk off the card while the camera recorded; build 7 sends those bytes on as they land — 16 MiB parts of one multipart upload to the record’s storage, signed by the app’s own door (/api/scan/r2-multipart) and carried over the phone’s cellular beside the camera’s Wi-Fi — so at Stop only the last part is left, and the walk is filed by its finished address with nothing to copy and nothing to send.

Read the rest · 1 more paragraph

Never a gate: no sign-in, no internet, a part the storage refuses, and the upload ends quietly (the multipart aborted) while the road after Stop copies and sends the file as before. The Walk page says it as it goes: "412 MB of it is already on the phone · 260 MB sent", "Sending the walk · 3,710 of 3,930 MB — the X5 can go off", "The whole walk is sent — the X5 can go off". Unproven on a real X5 until the next walk.

The tour first on the shop PC, and the file comes down over six connections

The owner: "it takes so fucking long to process, man… I need it to take single-digit minutes." Measured on his 4-minute walk this morning: the shop PC pulled the 3.9 GB file at 8 MB/s (8 minutes), stitched the watchable copy (4 minutes), and then its frame shelf held the graphics card for a quarter of an hour while the tour engine waited for a free card. The tour started 24 minutes after the file arrived.

Read the rest · 1 more paragraph

Now the engine takes the walk the moment its file is on the box. The watchable 360 and the frame shelf run after the tour, on their own thread, once no tour is queued or building. And the file comes down over six connections at once, one stream when the storage refuses ranges. The walk’s row says the shop PC’s own step throughout.

A walk’s row says what the shop PC is doing with it

The owner: "I wish the process was much clearer… I shouldn’t have to ask you status." A walk waiting for its tour said "Not measured yet — the shop PC picks it up" on the Record and on the Walk page while the shop PC was already downloading its file and stitching it. Now, when the shop PC is on that walk, both rows say its own step and the minutes left — "Shop PC · preparing the footage", "Shop PC · building the walk · about 6 minutes left" — read off the same status the shop PC line uses.

A cut copy of a walk is never filed as the walk

This morning the app lost the X5 a minute into a walk. The camera kept recording on its own card (3.9 GB), and the copy off the card that came up was 23.7 MB: the camera had answered a resume with "range not satisfiable" and the copier took the piece it held for the whole file. The shop PC could not read it, and the card sheet then said the walk was in the Record, with no way to bring it in again.

Read the rest · 1 more paragraph

Three fixes. The copier (the app’s build 6) throws a refused resume away and copies the file again from the start, and the background copier checks the copy against the card’s own listed size before it files anything. The server checks the uploaded object’s size against the card’s and refuses a short one in words. And a walk whose camera file failed on the shop PC is no longer "in the Record" on the card sheet: its file is offered again, and the record takes it again.

Every stop stands level — by the camera’s own sensor; the capture stack picks the job and the day; people stay in the picture, faces blurred

The owner, on the tours of his road walks: "it weirdly rotates and like rolls when using my finger… like make the viewer like how humans would view something." The viewer was not the cause. The engine’s level step read the skyline as the horizon, and over a street the skyline is roofs and trees, so it tilted his stops 20 to 41 degrees; the X5’s own frames were level. A tilted picture turned feels like rolling.

Read the rest · 4 more paragraphs

Now every stop of an .insv walk is levelled by the camera’s own gyroscope and accelerometer: gravity read over a stride either side of the stop, each sample turned by the gyroscope into the stop’s own instant, through the sensor’s fixed mounting in the camera. Measured against the vertical edges on 25 stops of three walks (median 3 degrees apart) and proved on a stop he carried at 59 degrees, which came out level. A video with no sensor still levels itself from its pictures, vertical edges first and the skyline only where there is no vertical to vote with.

A stop the map could not place now takes its place from the walk’s own motion track, so the far side of the street is in the 11:34 tour (15 of 15 stops where 8 were). The rings step no longer refuses such a stop.

The people blur covered whole bodies and a lot of what the viewer wanted to see. By default people now stay in the picture as shot; faces, plates and printed names are blurred as before.

The per-day + is gone from the Record’s and a job’s day rows. The capture stack’s line, "Files to <job> · <day>", is a key: open, it lists his jobs nearest first — the one he stands at is marked and chosen by itself when nothing else is, so a photo on site never lands in Unfiled — the day an Upload lands on, and New job.

The walk copies off the X5 while you record

The owner, after midnight: when I press Stop I should not have to keep the camera on, the file should already be on the phone. The full file lives on the X5's card until it is copied, and the copy after Stop took the camera's last minute of attention. Now the Android app tails the walk's file off the card while the camera records it, pulling each new megabyte as it lands, so Stop finds the whole file on the phone but for its closing bytes. The page says how many MB are already there as he walks.

Read the rest · 1 more paragraph

Said plainly: whether the X5 serves a file it is still writing is measured tonight on his phone, not before. If it refuses, the tail ends quietly and the copy after Stop runs as it did. Build 5 (1.4) carries it, as a test copy under its own address; the app everyone installs is unchanged until one real walk has gone through it.

Thursday, October 29, 2026

Connect brings in every walk that is waiting for the camera's file

At 11 PM he did what the Walk page told him: X5 on, Connect. The camera connected and the card was listed twice, and nothing copied. The page brought in only the walk it had just saved, or one whose card path this phone remembered letter for letter. After a reload, his two walks of the day were neither, so Connect read the card and put it down.

Read the rest · 2 more paragraphs

Now the page hands the copy road the walks it shows waiting for the camera's file, and every card file the record matches to one of his streamed walks by when it began is brought in, the walk just saved first, then the ones on the page, then the newest. The phone's own memory of a walk matches by the file's name as well as its path. Connect means it, on any phone, after any reload.

Then, the same hour, his read of the first run: the copy's words sat at the foot of the page while the walk's own row still said press Connect, and the shop PC's line told him to press Connect with the X5 already connected. Now the copy and the send are said on the walk's own row with a bar, the walk after it says it is next, the Done lands on the row, and the line stops telling him to press a key he has pressed. Measured off the ledger: the 656 MB walk copied off the X5 in 23 seconds and took 148 seconds to send over cellular, because the camera holds the phone's Wi-Fi while it is connected. The send is the wait, and it is the next thing to take off his hands.

The tour turns with the phone; the landing's tour fills the glass; the help pictures load

A stranger's walk of the live site two days before the release found three things. The landing framed the demo tour as a 420 px square and left half the glass white under it, and on a desktop the walk was a 300 px card in a field of nothing; a word of the page's own ("Tour") sat on top of the viewer's own title; and the tour's Help panel showed five broken pictures on every live tour.

Read the rest · 3 more paragraphs

The landing's frame now takes the height left between the sentence and the foot — portrait on a phone, wide on a desktop — with everything still on one screen, and the page's own word over the viewer is gone. The Help pictures were refused by the page's policy twice over: the prelude that sends a tour's relative pictures to its storage folder was inserted before the page's first script, and the help markup comes before that script; and the shop PC never uploaded the guide/ pictures with a tour at all. The prelude now goes at the head of the page, the pictures ship with every tour, and the four live tours were re-served with both fixes.

The engine's viewer gained a Motion key on touch screens: the view turns with the phone the way a street view does. Off until pressed (iOS asks its permission inside the press), a drag still turns the view, no jump when it comes on, and "No sensor" when the phone has none. Every frame the app puts a tour in now hands the frame the motion sensors (gyroscope, accelerometer, magnetometer) beside fullscreen. Nothing here has met a real phone's sensors yet; the first turn of his Razr is the proof.

Said plainly for the record (CLAUDE.md, STOP IS THE LAST PRESS): the Android build 4 that copies and sends a walk in the background with the screen off is built and committed but not published — it goes out after one real run with his X5 — and whether Cloudflare R2 still refuses an upload was not measured tonight.

Stop starts the copy — after Stop there is nothing left for him to do

Today a walk sat all day with its tour unbuilt. A tour is made only from the .insv the phone copies off the X5's card, and the Walk page started that copy only after the camera had been idle for six seconds (a second when it was live), and only while the page stayed open on the glass. He pressed Stop and put the phone in his pocket, the screen went dark, and the copy never began. His words: "a huge flaw: when I stop it should start processing."

Read the rest · 3 more paragraphs

Now the copy of the walk just saved starts the moment the camera's last seconds have drained — no idle wait — and it goes before any older walk. The screen is held on from Stop to the last byte of the send, and asked for again whenever the page comes back. If the camera handed back no file name at Stop (it stopped on its own — a full card, a flat battery), the record's match by when the walk began still finds its file on the card.

If the X5 goes off or out of reach part way through, the walk is not failed: it waits, says so ("nothing is lost — the copy picks up by itself the next time the X5 is on and connected"), and is tried again on its own — in thirty seconds, at once when the page comes back to the glass, or whenever the camera is next connected here or on /x5. No press.

The words say what is happening and what he can do: "Saved. Copying the full-quality file off the X5 · 43% · about 2 min — keep the X5 on until this says done. You can put the phone away." The moment the file is off the card it says the X5 can go off, even while the upload runs over cellular; when it is in, "Done — the X5 can go off. The shop PC is building the tour." Not yet met on his Razr; the native foreground service that keeps the copy going with the app in the background is a separate build.

A walk waiting on the X5's file says so on its day — it said "In line on the shop PC"

The owner's Vitronic walk from 11:34 this morning sat four hours under "Tour on the way · In line on the shop PC", and a press on its orb said the tour opens once it is built. Nothing was going to build it: since this morning a tour comes only from the camera's own .insv, and that file was still on the X5. The box's status page knew (waitsFor: camera), the feed stamped it on the walk's model, and the phone threw it away — parseModel, the one reader of a model, never copied waitsFor onto the phone's copy, so tourWaitWords fell through to the plain in-line words.

Read the rest · 1 more paragraph

One line in lib/capture-model.ts carries it now, and tests/tour-model.spec.ts pins it: a queued walk stamped waitsFor reads "Waiting for the camera's full-quality file — open Walk with the X5 on and press Connect" on the Record, a job's page and the orb's toast, shop PC up or down. The walk itself needs the same press it needed before: Connect on the Walk page with the X5 on.

An opened day is one big orb, its count, and the walks as time pills — the photos under it

The owner, on his Vitronic job at 11:43 this morning: “when a user opens the day’s log, show one beautiful orb, and then the count, then the amount of walks next to it… the walks at different times, so that the user clearly sees that a walk was processed for the day, and the photos are going to it.”

Read the rest · 2 more paragraphs

Opened, a day on a job’s page and on the Record now leads with ONE 96 px orb — the day’s newest walk in a thin halo ring, its count on the ball — and beside it the day’s walks as time pills, oldest first, the newest in ink; a press on a pill walks that one. Under the pills one line says where the tour stands and what goes with it (“Walk the tour › · 9 photos · 1 clip with it”), and the day’s grid follows. The small orb and the strip of squares step aside while the day is open (the grid is the photos) and come back when its line folds it.

Both pages draw the same block (DayRow.tsx OpenWalkOrb). The pills are 44 px — law 1 caught the first cut at 30. Pinned by tests/job-walks.spec.ts (a day walked twice) and tests/days-closed.spec.ts.

A day’s line is the date and the street; what it holds sits under the photos

The owner, on his Vitronic job this morning: “have the top line in the days show the address that those photos were at. The amount of clips and walks and all that can just be under the photo bar — that way it doesn’t occupy the same space.” On a day walked twice with nine photos and a clip, the counts had pushed the street off the line (“Columbia …”, “15450 Georgia A…”).

Read the rest · 1 more paragraph

Now the line is the date and the street, and one soft line under the orb and the squares says what the day holds — “walked 2 times · 9 photos · 1 clip” — with anything still on its way beside it. The same block on the Record and on a job’s page.

A day reads clean: the date on its own line, the orb and the photos under it — and the + is a menu

On the Record and on a job's page every day is now one block: a small line with the date (never cut), the street and what the day holds, and under it the day's 360 walk as an orb at the left with the photos beside it. A day walked twice wears a 2 on its orb; an opened day keeps the orb on top with the times of each walk.

Read the rest · 3 more paragraphs

The + on a day is a menu now: add photos, write a note onto that day, add a link, and on a job's page add a job doc — the four ways that used to live at the foot of the job. The address, Directions and who is on the job moved to the top of the page, and the people show on the front's rows and the Record's days too.

In the People sheet, 'How Sergio sees it' draws the job as that member sees it — nothing to rename, move or delete. The profile opens on his work: tours as orbs, jobs as rows, the crew as faces, then the photos.

Behind the glass: the full production build runs on the shop PC again and is the gate before every push — it catches what the nine failed deploys since October 14 died of. Vercel's deployment retention is a day for anything but production, a week for production.

A tour comes from the camera's own file, never the stream; the Walk page is the shop PC's status, a day, Connect, Record, Import

Last night a walk recorded through the app had its tour built from the camera's 2560-pixel stream the moment it landed. The stream is what the phone watches during the walk, not the recording: it carries a stitch seam and a fifth of the stops never placed. The owner's rule from here is permanent — the tour is built only from the full-quality file the phone copies off the X5's card, and a streamed walk waits for it, however long that takes. The code that fed the stream to the engine is deleted, not switched off.

Read the rest · 2 more paragraphs

While it waits the app says so in one sentence everywhere the walk shows — the Record's row, the Walk page, the shop PC's status line: the camera's full-quality file is still on the X5, open Walk with the X5 on and press Connect. The file then comes in by itself and the shop PC builds the tour from it.

The Walk page is simpler. The shop PC's own line is the first thing under the title — what it is building, the step, the minutes left, who is in line — with only the walks still on their way under it. The list of finished tours is gone from this page; a tour is the walk's orb on the Record and on its job. Where a walk files now has a day as well as a job: a recording or an import made today of Tuesday's walk goes on Tuesday.

Wednesday, October 28, 2026

A day is not a job: no glass ball on a photo-only day, and the capture key says where it files

A job's row is the place: its picture, its name, where it stands. A day's row is the time: the date leads, the walk's orb only when there was a walk, and the day's photos as its face. The empty glass ball on every walkless day is gone.

Read the rest · 1 more paragraph

The capture key now wears its destination over it, 'Vitronic · today', changing as you move through the app, so nothing goes in on faith. (Second deploy: the first build failed on Vercel.)

One walk a day, with its times inside

A day has one walk: one orb on its row. Walk the same place twice that day and the tour offers the times as pills across its top: 9:43 AM, 9:46 AM. A press swaps the recording; nothing else moves.

Read the rest · 1 more paragraph

The stacked orbs and the chapters from earlier tonight are gone. The owner: "a walk should be a static thing for a day, but there can just be different times."

The walk is the workspace: a day's walks stacked on the row, chapters when opened

A day with several walks keeps one spot on its row: the newest walk in front, the earlier ones peeking from behind. A press opens the day.

Read the rest · 1 more paragraph

Opened, the day reads as chapters: each walk a wide card that opens its tour, with the photos taken during that walk under it. What was taken outside any walk comes last. The photos feed the walk; the walk is the frame.

A day with several walks is one row

A day with two or more 360 walks used to show a row for each. Now it is one row: every walk's orb side by side at the left, oldest first, each one opening its own tour, then the day's line ("2 walks · 9 photos · 1 clip") and its photos. On the Record and on a job's page alike.

A + on every day: add photos onto that day

Each day's row on the Record and on a job's page ends with a +. It opens the phone's picker, and whatever is picked lands on that day, on that job, each file keeping its own time of day.

Read the rest · 1 more paragraph

The owner asked for it after a photo added at 8:05 PM went to the wrong day.

A photo lands on the day it was taken, by the phone's clock

At 8:05 PM a photo added to Vitronic landed under tomorrow. The pending tile and the job page read the day in UTC. Both now use the phone's calendar day, as the Record always did.

Read the rest · 1 more paragraph

The capture key says where it files before the press: the job, and today. The adding toast says the day too.

Show all 1,453