David Mar

Dashboard

Everything in the stack, at a glance.

5
Total projects
4
Active
1
In progress
Aug 27
Last updated

Projects

View all →

Recent activity

Timeline →
  1. The timeline learns to fold

    Long build-log entries now clamp to three lines with a read-more toggle, so the timeline and the dashboard feed skim cleanly while every word stays reachable. A sitemap joins robots.txt for search engines.

  2. The site moves to davidmar.me and starts saying what it is

    The hub gets a real domain and a front door meant for visitors instead of for its owner. The landing page now leads with the four data analyses and what each one actually found, with Saltmere set apart as the creative build; the dashboard moved to its own page. The framing changed to match what the site really is: not a developer portfolio, but a record of what one person can do with Claude Code — the questions, the judgment, and the null results included. Contact links, Open Graph metadata, and a favicon round it out.

  3. Saltmere: the act turns, and the flags Act I set finally get read

    Act II's map shipped before the calendar it exists for, so this was the calendar: days nine through sixteen, the season's turn. The audit that started it is the one worth keeping. Five flags the game had been writing onto the player's save since Act I were read by nothing at all — the counting dream, the second taking, the full-truth answer at the inquiry, the boot-scuff in the corner of the keeping room, the cut pack strap at the cave mouth. Act I had planted every piece of evidence and the game never paid any of it out. That audit is now a test with a ratchet on it: every flag that gets set must be read by something, and the list of exceptions may only get shorter. It caught the work, so it can catch the next slice failing the same way. What the payout looks like: on day nine the town meeting branches on whether the survey was ever reported and again on whether the flash was ever admitted to, and the full-truth path has the mayor waiting with an enchanter he sent to the row for. The other path watches that man go inside without you, which is where withholding finally gets charged rather than merely noted. Day eleven the count in the dream stops on you. Day thirteen names the thing, for anyone the day-nine door passed over. Both doors converge on the beat the whole slice is built around: not an explanation, a demonstration. The mark is named as a fitting rather than a curse, the channel answers, and one fragment of the keeping room comes through it from the inside — cold, a stroke scratched beside four others, a tired voice keeping count. No face and no name, asserted by test, because the deduction has to stay the player's. Then it becomes a decision with a bill attached. Three permanent answers at the counter, every price named before it is paid: open the channel and you get a weapon that hits the brood harder because it knows them from inside, bought with a point of maximum nerve for the rest of the season, which is a cost paid in every fight rather than once. Cut it and the dreams stop and the voice you heard was the last of it. Refuse, and nothing is on you but your own hand, which is the one thing the other two answers cannot offer. The next night reads the choice back in four variants, including the one for a player who still hasn't answered. Day fourteen is the revelation, and it was already latent in the enemy roster rather than needing to be announced: unfinished brood has no morale and telegraphs everything, finished brood feints and holds a line, and the difference between those two statlines is a person. Nerve taken from kept captives is what finishes them. The taken are not eaten, they are kept. And the ones who run are no use for it, which is why the one who never ran at anything is the one who is still alive. Whether the man who raised her gets told is the player's, and the game writes that fork three times over, weighted by how sure they actually are, with sparing him heaviest at the top rung where it stops being protection and starts being management. Day sixteen the town watches a farmwife walk compelled at a shut gate, and she lives, emptied, which is worse and does more. The narrator never explains it. The tell is that the player recognises the gait. A fifth art-less speaker was built to carry it, an enchanter who answers a question with what it costs rather than with the answer and will not give anything away for nothing, reassurance included. The voice lint earned its keep again: it caught the scene where the barman is handed hope running entirely on clipped fragments and pulling him under his own rhythm band, which was the right catch. He says two more real things now. 169 tests green.

    Saltmere
  4. Saltmere: Act I finished, and a register that changes as people warm to you

    The plan was to finish Act I properly before Act II gets built on top of it, since changes underneath have knock-on effects. What that turned into was a mechanic nobody had asked for at the start of the day. The character bibles set a target sentence rhythm per character, and one of them, the house bard, measured nine words against a band of twelve to eighteen. The obvious reading was that he was written wrong. The better reading, once it was pointed out, is that nearly every line he has is a first-meeting line, so he is not wrong, he is guarded. That reframes the whole idea: a band is not a flat target per character, it is a destination, and it grows as the relationship does. A stranger is brief; people talk more, and offer things unasked, as they warm to you. So the bible band became the Beloved-tier destination and every character got a guarded floor to start from, keyed to the affection tiers the game already tracked. The striking part is not the numbers but what happens between them: the spread between characters is about five words at first meeting and nine or more at the top, which means the cast differentiates as you come to know them. Strangers sounding alike is not a failure, it is what being a stranger sounds like, and it explains why an earlier measurement of the whole corpus found only 1.34 words of separation. Checking whether the game already did this produced the sharpest finding of the day: affection-gated content measured 7.1 words against 7.8 for ungated, which is to say every training ladder in the game ran backwards. Three separate characters got terser the better you knew them. All of them now climb. A second correction came in mid-pass and mattered as much: a longer sentence is not a friendlier one, it is just a run-on, and warmth is carried by what is said, by how much someone volunteers unasked, by how many turns they take, and by expression. The lint as written actively rewarded run-ons, because the fastest way to lift an average is one enormous sentence, so it gained a guard against exactly that. Stats got the same treatment from a different angle, modelled on how speech checks work in Fallout: a check there does not hand you more conversation, it hands you a different route through the one you are in. So affection is depth and stats are approach, deliberately independent, with every lead answering to the stat they teach and Charm shortening the climb to warmth without ever lifting the ceiling the story controls. Alongside all that, the second tier of description finished: every one of the twenty-one locations can now be sat in and looked around, eighty-seven nodes of it, each detail teaching something rather than decorating. Across the day the corpus went from 145 nodes to 242, em-dashes from 180 to 44, and the narrator's decoding constructions from five to zero.

    Saltmere
  5. Saltmere: the rooms were never small

    The question was whether to make each location physically larger before Act II adds thirteen more, because there seemed to be more things in every room than there were places to stand. Measuring first turned the question around. Across twenty-one scenes there were 925 standable cells and 3,109 blank interior cells: seventy-seven percent of the drawn interior of every room was gaps in the walking lattice rather than walls or furniture. Floor had always been drawn on a three-column rhythm, because the movement scan skips at most two blanks, and filling that lattice in was worth up to four times the standing room already inside the existing frames. So the expensive option — wider grids — would have bought something the game mostly had, and it had a hard ceiling anyway: the scene font is width-governed on phones, where past about fifty-nine columns the map is silently cropped on both sides with no scroll and no warning, and movement is keyboard-only. Densifying costs nothing by comparison. No dimension changes, no font change, and because the renderer already emits an element per cell including the blanks, not a single extra DOM node. Crowding also turned out to be local rather than general: the spring camp had 2.2 standable cells per hotspot and the wreck cove 3.0, while the edge hut had 22.5 and the under-tavern 20. That made the load-bearing change a rule rather than a redraw — six standable cells per hotspot, minimum, enforced by a test whose budget only ratchets down, so new content is pushed toward the empty rooms instead of piling onto the busy ones, and Act II inherits the standard instead of relying on anyone remembering it. Pitch now follows crowding rather than geography: three-column is the default and the maximum, two-column is for rooms that fail the ratio, and pitch never mixes inside a single room. Eight locations were redrawn. Three of them could not be fixed by dots at all, because they were mostly sea or forest with one walking line through the middle — the harbor quay gained an apron so the board and the plank shrine stopped sharing a step, and the spring camp and wreck cove went from a single walking line to four and three. Floor cells went 925 to 1,118 and rooms under the ratio went eight to zero. Two hazards were fenced off on the way: the scene padding helper fills with a glyph that is also floor, so a row ending in it would silently pad out a contiguous band walking at the wrong pace, and a redraw moves the lattice out from under saved positions, where the player character stops being drawn at all and every movement key goes dead. That one is now checked on every load regardless of save version. The pinned coordinates in the movement tests were re-derived from the art rather than re-pinned, so the next redraw moves the tests with it instead of breaking them.

    Saltmere