<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Tavor Digital Blog</title>
  <link>https://tavordigital.com/blog</link>
  <atom:link href="https://tavordigital.com/blog/feed.xml" rel="self" type="application/rss+xml"/>
  <description>Notes from Tavor Digital on websites, branding and practical AI.</description>
  <language>en</language>
  <item>
    <title>Six directions in four days</title>
    <link>https://tavordigital.com/blog/six-directions-in-four-days</link>
    <guid isPermaLink="true">https://tavordigital.com/blog/six-directions-in-four-days</guid>
    <pubDate>Fri, 09 Oct 2026 09:00:00 +0000</pubDate>
    <description>Our own website started over six times before it settled on black, white and one blue. What we threw out taught us more than what we kept.</description>
    <content:encoded><![CDATA[<div class="b-text">
<p>Designing your own studio's website is the hardest brief there is, because nobody stops you from starting again. Ours started again six times in four days. A particle ribbon and a purple planet on the horizon. A bright product-marketing site. An orb with orbiting labels. A ray-marched night render of the mountain. A plain black, white and blue site. Then the silk dome you see now.</p>
</div>
<figure class="b-compare is-wide" data-compare><div class="b-compare-frame" style="--split: 50%"><img src="https://tavordigital.com/assets/img/blog/site-home.webp" alt="The Tavor Digital home page today, with a blue-lit silk dome" loading="lazy" decoding="async"><div class="b-compare-before"><img src="https://tavordigital.com/assets/img/blog/site-before.webp" alt="An earlier direction: a dark page with a glowing orb surrounded by orbiting labels, under the studio&#x27;s previous name" loading="lazy" decoding="async"></div><span class="b-compare-handle" aria-hidden="true"></span><span class="b-compare-label is-before">An earlier direction</span><span class="b-compare-label is-after">Today</span><input type="range" min="0" max="100" value="50" aria-label="Drag to compare An earlier direction and Today"></div><figcaption>Drag across to compare one of the directions we left behind with the site today.</figcaption></figure>
<div class="b-text">
<h2 id="what-we-threw-out">What we threw out</h2>
<p>Partway through, we made a list of everything that made the site look like a template, and removed all of it in a single change:</p>
<ul>
<li>readouts styled like a heads-up display</li>
<li>a dotted grid in the background</li>
<li>gradient text</li>
<li>clusters of pill-shaped labels</li>
<li>sparkles</li>
<li>headlines that blur in</li>
<li>a giant faded wordmark across the footer</li>
</ul>
<p>None of these is wrong on its own. Together, they're what a thousand generated landing pages look like, and they say nothing about the business behind them. The rule we kept afterwards is written into the brand guide: no spinning globes, no particle storms, no rainbow effects.</p>
<h2 id="the-direction-that-stuck">The direction that stuck</h2>
<p>The site is black, white and one blue. The page is a single framed column with two rails running down its sides, and quiet lines divide it into rows and cells, like a blueprint. The colour lives in the pictures and the interface demos, not in the furniture.</p>
<p>The system is small on purpose:</p>
<div class="post-table"><table><thead><tr><th>Part</th><th>Rule</th></tr></thead><tbody><tr><td>Colour</td><td>Black ground, near-white ink, one blue (<code>#2f6bff</code>), green only for live and success states</td></tr><tr><td>Contrast</td><td>Body text 8.6:1, the quietest text 6.1:1</td></tr><tr><td>Type</td><td>Geist only, at five heading sizes and no more</td></tr><tr><td>Motion</td><td>One duration for every transition: a quarter of a second</td></tr><tr><td>Glow</td><td>Blue light in exactly two places: the hero and the closing section</td></tr></tbody></table></div>
<h2 id="the-hero">The hero</h2>
<p>The hero is a picture of dark silk folded into a single dome, with its ridge lit blue: Mount Tavor, without drawing a mountain. It was made with an image generator, and it's the one place we let one lead. Moving the pointer leaves a liquid trail that bends the picture. To keep it light, the trail is simulated at a fifth of the picture's size.</p>
</div>
<figure class="b-media is-wide"><img src="https://tavordigital.com/assets/img/blog/site-services.webp" alt="The Services page: a list of what a website project includes, beside a working demo of a content editor" loading="lazy" decoding="async"><figcaption>The Services page, where the demos carry the colour.</figcaption></figure>
<div class="b-text">
<h2 id="making-it-fast">Making it fast</h2>
<p>A site that says it builds fast websites has to be one. A single round of work:</p>
</div>
<figure class="b-stats is-wide"><div class="b-stats-grid"><div><b>117 → 61 KB</b><span>Fonts, now about 40 KB</span></div><div><b>6.5 → 2.7 ms</b><span>The hero's script time per frame</span></div><div><b>75 → 13 KB</b><span>The work image, from JPEG to WebP</span></div></div><figcaption>One round of performance work.</figcaption></figure>
<div class="b-text">
<p>Later we removed smooth wheel scrolling altogether and went back to the browser's own. The rule since then is that nothing may scroll the page except the reader.</p>
<h2 id="words">Words</h2>
<p>The copy has its own rules: no hype words like "revolutionise" or "supercharge", no invented numbers and no testimonials we can't show. It's the same restraint as the design: if a sentence would fit any studio's website, it doesn't belong on ours.</p>
</div>]]></content:encoded>
  </item>
  <item>
    <title>Who edits your website after launch?</title>
    <link>https://tavordigital.com/blog/who-edits-your-website-after-launch</link>
    <guid isPermaLink="true">https://tavordigital.com/blog/who-edits-your-website-after-launch</guid>
    <pubDate>Thu, 08 Oct 2026 09:00:00 +0000</pubDate>
    <description>Most websites change hands the day they go live. Choosing how your team will update it matters as much as how it looks.</description>
    <content:encoded><![CDATA[<div class="b-text">
<p>Launch day is when a website stops being a project and becomes part of how a business runs. Someone has to add the new product, fix a price or post next month's event. Too often that someone is a developer on a retainer, because nobody planned for anyone else to do it.</p>
<p>So before we design a page, we ask who will be changing it, how often and what they'll change. The answer decides how the site gets built.</p>
<h2 id="three-kinds-of-content">Three kinds of content</h2>
<p>Almost everything on a business website falls into one of three groups:</p>
<ul>
<li><strong>Pages that rarely change</strong>, like the home page, services and about. These are designed once and refined now and then.</li>
<li><strong>Collections that grow</strong>, like listings, team members, case studies, events or posts. Each new item follows the same shape.</li>
<li><strong>Data that moves every day</strong>, like stock levels, bookings or orders. This usually lives in another system already.</li>
</ul>
<p>The first group needs good design. The second needs a simple way to add items. The third needs a connection to the system where the data already lives, not another copy of it.</p>
<h2 id="picking-the-right-editor">Picking the right editor</h2>
<p>For the collections, there's a spectrum of tools. Here is how we choose:</p>
<div class="post-table"><table><thead><tr><th>If your team…</th><th>We usually reach for</th></tr></thead><tbody><tr><td>Adds a few items a month and wants nothing new to learn</td><td>A form-based editor that saves straight into the site</td></tr><tr><td>Publishes often, with lots of images and several editors</td><td>A headless CMS such as Sanity</td></tr><tr><td>Already lives in spreadsheets</td><td>Airtable or a similar tool, read when the site is built</td></tr></tbody></table></div>
<p>The first option is what this blog runs on. Each post is a plain text file kept with the site's code. Writing one is like filling in a form, and publishing it rebuilds the site in under a minute. There is no database to secure and no monthly fee.</p>
</div>
<figure class="b-quote is-wide"><blockquote><p>The best editor is the one your team will still be using a year from now.</p></blockquote></figure>
<div class="b-text">
<h2 id="what-to-watch-for">What to watch for</h2>
<p>A few things decide whether a setup holds up once the launch excitement fades:</p>
<ol>
<li><strong>Images.</strong> Some tools, Airtable and Notion among them, give out image links that expire after a few hours. A site that loads them directly breaks without warning, so we copy images across when the site is built.</li>
<li><strong>Seats.</strong> Per-user pricing adds up when five people need to fix a typo now and then.</li>
<li><strong>Previews.</strong> Editors should see a change before it goes live. Ours open a private preview link for every draft.</li>
<li><strong>Ownership.</strong> Your content should be exportable in a plain format. If the tool disappears, the words and pictures shouldn't go with it.</li>
</ol>
<h2 id="the-short-version">The short version</h2>
<p>Decide who edits what before choosing a platform. Keep the pages that rarely change in code, give growing collections a simple editor, and connect live data where it already lives.</p>
<p>If you're planning a site and want to talk through how your team will run it, <a href="/contact">get in touch</a>. We're happy to help you think it through.</p>
</div>]]></content:encoded>
  </item>
  <item>
    <title>Designing sound for glass, switched off by default</title>
    <link>https://tavordigital.com/blog/designing-sound-for-glass</link>
    <guid isPermaLink="true">https://tavordigital.com/blog/designing-sound-for-glass</guid>
    <pubDate>Tue, 06 Oct 2026 09:00:00 +0000</pubDate>
    <description>We planned a careful audition of recorded sound effects for the portfolio. In the end, every sound is synthesised in the browser, with no audio files at all.</description>
    <content:encoded><![CDATA[<div class="b-text">
<p>The glass portfolio has sound. It is off on every visit, behind a small control in the corner, because sound on the web should be invited, never assumed. Once it's on, it should feel like touching the thing on screen and nothing more.</p>
<h2 id="three-directions">Three directions</h2>
<p>We wrote down three directions before listening to anything:</p>
<div class="post-table"><table><thead><tr><th>Direction</th><th>Character</th><th>Role</th></tr></thead><tbody><tr><td>Soft glass</td><td>A muted touch with a short resonance</td><td>The baseline for every cue</td></tr><tr><td>Elastic glass</td><td>A small bend in pitch</td><td>Only for large transitions</td></tr><tr><td>Dry precision</td><td>Compact ticks</td><td>The benchmark for restraint</td></tr></tbody></table></div>
<p>The recommendation was soft glass with an elastic touch for the big moments. Just as useful was the list of what to rule out on paper: long crystal rings, shattering, water drops, cartoon boings, cinematic impacts and any constant noise while scrolling. Searching sound libraries for "glass" alone mostly turns up breakage and long ringing, which is the opposite of what we wanted.</p>
<h2 id="a-plan-for-auditions">A plan for auditions</h2>
<p>The plan was thorough. We shortlisted two free libraries and two paid ones, set a budget of 250 KB for the first set of sounds, and wrote a scoring sheet that weighted how comfortable a sound is to hear the hundredth time above how well it fits the brand:</p>
<ul>
<li>comfort when repeated: 30%</li>
<li>fit with the direction: 25%</li>
<li>timing with the motion: 20%</li>
<li>clarity on small speakers: 15%</li>
<li>consistency with the other cues: 10%</li>
</ul>
<p>It also said that silence could win. For some moments, like the spiral coming to rest, no sound was a valid answer.</p>
<h2 id="what-we-built-instead">What we built instead</h2>
<p>We never ran those auditions. Instead, every cue on the site is synthesised in the browser with the Web Audio API, so there are no sound files to download at all:</p>
<ul>
<li><strong>A tap</strong> is a short sine tone with three quieter partials at uneven ratios above it, each fading faster than the last, plus a tiny filtered click. The uneven partials are what make it read as glass rather than a beep.</li>
<li><strong>Switching views</strong> glides between two pitches over 0.16 seconds, then taps.</li>
<li><strong>Opening the menu</strong> is a soft breath of filtered noise rising in pitch. Closing it falls.</li>
</ul>
<p>Everything runs through one gentle compressor, and no more than three sounds play at once.</p>
</div>
<figure class="b-quote is-wide"><blockquote><p>Navigation never waits for audio. Sound follows the interface; it never holds it up.</p></blockquote></figure>
<div class="b-text">
<h2 id="the-rules">The rules</h2>
<p>The rules mattered more than the sounds:</p>
<ol>
<li><strong>Cues are dropped, never queued.</strong> If a sound would arrive late, it doesn't play at all.</li>
<li><strong>Navigation never waits for audio.</strong> Sound follows the interface. It never holds it up.</li>
<li><strong>Every cue has a rate limit.</strong> Taps can't repeat faster than every 60 ms, and the stickers on the contact section are capped at four a second.</li>
<li><strong>Some things stay silent.</strong> Scrolling and the About section make no sound.</li>
</ol>
<p>The audition plan is still on file. If we ever add recorded sounds, they'll have to beat a synthesised set that weighs nothing and never loads late.</p>
</div>]]></content:encoded>
  </item>
  <item>
    <title>Tuning a spiral, one snapshot at a time</title>
    <link>https://tavordigital.com/blog/tuning-a-spiral-one-snapshot-at-a-time</link>
    <guid isPermaLink="true">https://tavordigital.com/blog/tuning-a-spiral-one-snapshot-at-a-time</guid>
    <pubDate>Mon, 05 Oct 2026 09:00:00 +0000</pubDate>
    <description>Before building the portfolio, we built a one-card study and a spiral study, and saved a snapshot before every big change. Nine snapshots later, we dropped the rule we&#x27;d worked hardest to keep.</description>
    <content:encoded><![CDATA[<div class="b-text">
<p>Motion is hard to judge from a description. So before building the portfolio, we built two small studies on a plain light page, and every time we were about to change something fundamental, we saved the working version first. The spiral study ended with nine of those snapshots, and they tell the story better than our notes do.</p>
<h2 id="one-card-first">One card first</h2>
</div>
<div class="b-split is-image-right"><figure class="b-split-media"><img src="https://tavordigital.com/assets/img/blog/card-study.webp" alt="The card study: one glass card with an orange ring artwork, and three sliders for depth, refraction and colour separation" loading="lazy" decoding="async"><figcaption>Card study 01: one card, three sliders, and the values that carried into everything after it.</figcaption></figure><div class="b-split-text"><p>The first study was a single card with three sliders: glass depth, refraction and colour separation. It ran in one shader pass, capped the pixel ratio at 2, and stopped animating once the card's spring settled, so a study left open in a tab used no power.</p>
<p>The values we approved there, depth 67, refraction 47 and separation 75, went into the spiral unchanged. Settling the material on one card first meant the spiral could be judged on motion alone.</p></div></div>
<div class="b-text">
<h2 id="from-snapping-to-drifting">From snapping to drifting</h2>
<p>The first spiral had seven cards on a vertical helix, and choosing one made it spring into place. It felt like a carousel. Studying how the reference moved showed us something different: wheel input added small impulses to a velocity, which eased in and decayed a little every frame, so the spiral never snapped anywhere. We replaced the selection spring with a continuous drift at 0.108 cards a second.</p>
<h2 id="flat-cards-cross-each-other">Flat cards cross each other</h2>
<p>Flat rectangles on a curve intersect where they overlap, and the edges cut visibly through each other. The fix was to bend each card into a strip of a cylinder, built from a 40 by 20 grid of 1,600 triangles. The same grid is used to draw the card and to work out which card is under the pointer, so what you see and what you click always agree.</p>
<h2 id="finding-the-frame">Finding the frame</h2>
<p>Most of the snapshots are about proportion: how tall the cards are, how far the camera sits, how steeply the spiral climbs. Along the way we tried taller cards, an elliptical orbit, then the reference's proportions: a 35° field of view, a camera four radii from the axis and 13 positions on the helix. The final version is modelled on a public demo of a spiral slider, with 5:3 cards, a constant gap between them and a wider field of view on small screens.</p>
<h2 id="letting-go-of-a-rule">Letting go of a rule</h2>
<p>For most of the rounds, the study enforced one requirement above all others: every card had to stay fully on screen. We built a 16-pixel clearance, a solver that pushed cards inward at the edges of the screen, and checks for every corner.</p>
<p>The final version drops all of it. The ends of the spiral are now allowed to run past the edge of the window instead of being folded back in to keep every card on screen. Without the solver bending the path at the edges, the spiral keeps one shape all the way along, and it reads as continuing beyond the frame.</p>
<h2 id="checked-by-scripts">Checked by scripts</h2>
<p>Each snapshot was checked by small scripts that open the study in a headless browser at desktop and phone sizes and measure what actually happened:</p>
<ul>
<li>whether the cards move at the intended speed and respond to wheel, drag and keys</li>
<li>whether curved surfaces ever cross, across 21 to 28 combinations of layout and travel</li>
<li>how much of the depth blur reaches each card, read back from the GPU</li>
</ul>
<p>Those checks prove the geometry, not the speed. A check in a desktop browser at phone size is not a measurement of a real phone, and we wrote that down next to every result so we wouldn't forget it.</p>
<h2 id="what-happened-to-the-study">What happened to the study</h2>
<p>The spiral study was never the shipped portfolio. The final build was written separately, and the study went back to being a reference. That's what we'd recommend for any motion-heavy piece: tune it somewhere quiet, keep every version, and only then build the real thing.</p>
</div>]]></content:encoded>
  </item>
  <item>
    <title>Keeping a field guide to 375 tools</title>
    <link>https://tavordigital.com/blog/a-field-guide-to-375-tools</link>
    <guid isPermaLink="true">https://tavordigital.com/blog/a-field-guide-to-375-tools</guid>
    <pubDate>Sun, 04 Oct 2026 09:00:00 +0000</pubDate>
    <description>Our Resources page started as a list of 168 tools and grew to 375 in fifteen sections. The trick to keeping it current is that it isn&#x27;t really a page.</description>
    <content:encoded><![CDATA[<div class="b-text">
<p>Clients ask us which tools to use more than almost anything else. So we wrote it down: a plain-English field guide to the software we design, build and connect with, saying what each tool is and when it's the right choice.</p>
<p>It started with 168 tools. It now covers 375, in fifteen sections, from thinking and writing to measuring and maintaining a site after launch.</p>
<h2 id="it-s-data-not-a-page">It's data, not a page</h2>
<p>The guide isn't written as a web page. Every tool is a short entry in one data file: its name, its section, what it is and when to pick it. A small build step turns that file into the page, the contents list and the index of names at the top.</p>
<p>That has three useful side effects:</p>
<ul>
<li>Adding or correcting a tool means editing a line, not a layout.</li>
<li>The count in the page's title and in the search box is always right, because it's counted at build time.</li>
<li>Search works on the page immediately, with no service behind it. Try "video" or "CMS".</li>
</ul>
<h2 id="keeping-it-honest">Keeping it honest</h2>
<p>Tools change faster than websites. Products close, get renamed or fold into something bigger. The guide is corrected as that happens: when a product shuts down it comes out, and when one is renamed the entry follows the new name.</p>
<h2 id="how-we-choose">How we choose</h2>
<p>The guide isn't a ranking, because there's rarely one best tool, only the best fit for a team, a budget and a goal. We pick with three questions:</p>
<ol>
<li><strong>What job needs doing?</strong> The job comes first, then the tool, never the other way round.</li>
<li><strong>Can your team run it?</strong> If it needs us every week, it's the wrong choice.</li>
<li><strong>Does your data stay yours?</strong> You should be able to take your content and leave.</li>
</ol>
</div>]]></content:encoded>
  </item>
  <item>
    <title>Cutting each card from real glass</title>
    <link>https://tavordigital.com/blog/cutting-cards-from-real-glass</link>
    <guid isPermaLink="true">https://tavordigital.com/blog/cutting-cards-from-real-glass</guid>
    <pubDate>Sat, 03 Oct 2026 09:00:00 +0000</pubDate>
    <description>Our portfolio is a spiral of glass cards, each one refracting light like a real material. Here is how it works in one WebGL canvas, with no libraries.</description>
    <content:encoded><![CDATA[<div class="b-text">
<p>Our portfolio is a dark optical bench where every project is a card of glass, arranged in a spiral you can scroll, drag and fly into. It is a concept piece: apart from the Kanya card, the cards hold generative studies rather than client work, so we could push the medium without a brief holding it back.</p>
<p>The idea is not ours alone. The spiral is strongly inspired by Pacôme Pertant's portfolio, designed by Louis Bocquet and developed by Colin Demouge, and the glass material is adapted from the Infinite Liquid Glass technique. What we added was the question of what would happen if every card were cut from a real, measurable material.</p>
<h2 id="one-canvas-no-libraries">One canvas, no libraries</h2>
<p>We had a long list of candidates: WebGPU, Three.js, an animation library for the scrolling, another for smooth wheels, and a ready-made liquid glass effect. The site uses none of them. All the glass is drawn by one hand-written WebGL2 canvas behind the page, with no libraries and no build step.</p>
<p>The fastest-feeling design is not always the one with the smallest library, but here, owning every line meant we could make the canvas and the page agree exactly. The canvas measures in CSS pixels, so any card can sit on the spiral or follow the position of an element on the page, and blend between the two. That's how a card flies out of the spiral and becomes the hero of a project page, or grows from the showreel thumbnail into a full frame.</p>
<h2 id="every-card-is-a-real-material">Every card is a real material</h2>
<p>Each card has the refractive index and Abbe number of a real optical material. The index sets how strongly the card bends what's behind its bevel, and the Abbe number sets how much it splits light into colours.</p>
<div class="post-table"><table><thead><tr><th>Card</th><th>Material</th><th>Index</th><th>Abbe number</th></tr></thead><tbody><tr><td>Prism</td><td>Dense flint (SF11)</td><td>1.785</td><td>25.8</td></tr><tr><td>Dune</td><td>Polycarbonate</td><td>1.586</td><td>30.0</td></tr><tr><td>Contour</td><td>N-BK7 optical glass</td><td>1.517</td><td>64.2</td></tr><tr><td>Quicksilver</td><td>Fused silica</td><td>1.458</td><td>67.8</td></tr><tr><td>Kanya</td><td>Sapphire</td><td>1.768</td><td>72.2</td></tr><tr><td>Halo</td><td>Diamond</td><td>2.417</td><td>55.3</td></tr></tbody></table></div>
<p>Refraction follows the index minus one, and colour splitting follows one over the Abbe number. So flint and polycarbonate fringe visibly at their edges, while fused silica and sapphire stay clean. The specs on each project page quote the real values.</p>
<h2 id="the-material-in-one-pass">The material, in one pass</h2>
<p>Every card is drawn in a single pass:</p>
<ol>
<li>The shape of a rounded rectangle is turned into a bevel.</li>
<li>The bevel's slope refracts the card's own artwork, separately for red, green and blue, which is what makes the colour fringes.</li>
<li>A reflection of the surroundings, a Fresnel edge, a highlight and a thin spectral rim finish the surface.</li>
</ol>
<p>The cards refract their own artwork rather than the whole scene behind them. Real transmission through the background would take extra passes for every card, and we kept that in reserve for a few moments that would earn it.</p>
<h2 id="keeping-it-light">Keeping it light</h2>
</div>
<div class="b-text">
<p>Glass is expensive to draw, so the budget was set before the effect. Only the cards in focus are re-rendered, and depth of field comes from reading blurrier versions of a texture for distant cards, so it costs no extra passes.</p>
</div>
<figure class="b-stats is-wide"><div class="b-stats-grid"><div><b>1.75×</b><span>The highest pixel ratio. It steps down on its own if frames run long.</span></div><div><b>768 × 480</b><span>The size of each card's artwork</span></div><div><b>3</b><span>Cards re-rendered at most, only those in focus</span></div><div><b>30 fps</b><span>How often the artwork updates</span></div></div></figure>
<figure class="b-media is-wide"><img src="https://tavordigital.com/assets/img/blog/glass-list.webp" alt="The portfolio&#x27;s list view: oversized project names, with a single glass preview beside them" loading="lazy" decoding="async"><figcaption>The list view: one pooled glass preview follows the pointer and leans with its speed.</figcaption></figure>
<div class="b-text">
<h2 id="when-the-glass-isn-t-there">When the glass isn't there</h2>
<p>A portfolio like this has to work without its effects:</p>
<ul>
<li>Without WebGL2, the site switches to the list view, with CSS gradients as previews. Every project and link still works.</li>
<li>With reduced motion turned on, nothing drifts, the artwork holds still and the About text appears fully lit.</li>
<li>The spiral works with the arrow keys and Enter, the menu traps focus, and Escape closes it.</li>
</ul>
<p>The menu itself became our favourite rule. It's a milky, nearly opaque glass panel, because glass is allowed to be nearly opaque wherever reading matters more than refraction.</p>
</div>]]></content:encoded>
  </item>
  <item>
    <title>Why our 404 page has a game in it</title>
    <link>https://tavordigital.com/blog/why-our-404-page-has-a-game</link>
    <guid isPermaLink="true">https://tavordigital.com/blog/why-our-404-page-has-a-game</guid>
    <pubDate>Fri, 02 Oct 2026 09:00:00 +0000</pubDate>
    <description>A missing page is a dead end. Ours has a tiny pixel-art shooter, and it still puts the way out first.</description>
    <content:encoded><![CDATA[<div class="b-text">
<p>Everyone lands on a missing page sooner or later: an old link, a typo, a page that moved. Most 404 pages apologise and point home. Ours does that too, and then offers something to do while you're there.</p>
<h2 id="404-invaders">404 Invaders</h2>
<p>It's a tiny pixel-art shooter in the site's own palette. The ship fires by itself, so the only thing to learn is moving: drag with a finger, use the mouse or press the arrow keys. Before you start, the game plays itself quietly behind the start screen, so it's obvious what it is without reading any instructions.</p>
<p>The sprites are drawn from short strings of letters, one letter per pixel and one colour per letter, so the whole game is a single small script with no images to download.</p>
<h2 id="the-way-out-comes-first">The way out comes first</h2>
<p>A game on an error page is only charming if it never gets in the way. The headline says what happened, the first two buttons are <strong>Back home</strong> and <strong>Say hello</strong>, and the game sits to one side for anyone who wants it.</p>
<h2 id="nothing-leaves-your-device">Nothing leaves your device</h2>
<p>The game remembers your best score in your own browser's storage. It's never sent to us, it isn't a cookie, and clearing your browser's data for the site removes it. It's also written into our privacy policy, because a policy should cover even the small things.</p>
</div>]]></content:encoded>
  </item>
  <item>
    <title>A mountain inside a lens</title>
    <link>https://tavordigital.com/blog/a-mountain-inside-a-lens</link>
    <guid isPermaLink="true">https://tavordigital.com/blog/a-mountain-inside-a-lens</guid>
    <pubDate>Wed, 30 Sep 2026 09:00:00 +0000</pubDate>
    <description>How the Tavor Digital mark went through six versions in three days, and why the one that stayed is drawn by numbers instead of by hand.</description>
    <content:encoded><![CDATA[<div class="b-text">
<p>The brief for our own logo had one rule before it had a shape: it must not look like AI slop. Image generators are good at texture and light, but they draw pixels with no understanding of curves or geometry. A mark has to survive at 16 pixels, in one colour, cut into metal or stitched into fabric, and that takes construction, not just a nice picture.</p>
<h2 id="why-a-mountain">Why a mountain</h2>
<p>The studio is named after Mount Tavor. It rises on its own from the Jezreel Valley: a single rounded dome you can see from everywhere, built on solid ground. That gave us the idea we wanted the mark to carry, which is one clear shape, standing on something firm.</p>
<p>It also helped that Tavor is not a jagged peak. A rounded crown is a natural fit for a mark built from circles, where a sawtooth range would have fought every curve around it.</p>
<h2 id="six-marks-in-three-days">Six marks in three days</h2>
<p>The mark changed more than anything else on the site. In order:</p>
<ol>
<li>An outlined symbol, under the studio's earlier name.</li>
<li>A horizon line with a grotesque wordmark.</li>
<li>An ink square with an ultraviolet dot.</li>
<li>A glass orb.</li>
<li>Mount Tavor's dome, split by a T cut out of the negative space.</li>
<li>The lens, which stayed.</li>
</ol>
<p>Most of them lasted less than a day. The lens was the first one that still worked at the size of a browser tab, in one colour.</p>
<h2 id="the-lens">The lens</h2>
<p>The final mark is a disc split by the ridge of Mount Tavor, so the mountain rises inside it like a moon over the horizon. The sky above the ridge is blue. The mountain is white on dark grounds and black on light ones.</p>
</div>
<figure class="b-media is-column"><img src="https://tavordigital.com/assets/img/blog/identity-moodboard.webp" alt="An image-generated moodboard used to test the mark in materials: the lens as an object, embossed paper, the website on a laptop, the palette, the wordmark, stationery, fabric and the mountain in mist" loading="lazy" decoding="async"><figcaption>A moodboard made with an image generator, used only to see the finished mark on materials. The mark itself is drawn by code.</figcaption></figure>
<div class="b-text">
<h2 id="drawn-by-numbers">Drawn by numbers</h2>
<p>Our first plan was to draw the directions by hand in a design tool, because SVG paths written by guesswork tend to come out lumpy. The mark that shipped is generated by a short Python script instead, and the difference is that the script doesn't guess. It draws with exact geometry:</p>
<ul>
<li>The mark sits in a 64 by 64 box, on a disc with a radius of 28.</li>
<li>The ridge follows a smooth curve with a rounded crown and steep flanks. Two numbers set how wide the crown is and how sharply the sides fall.</li>
<li>Every other measurement, from the summit's height to the gaps between shapes, is a number in the same script, so the mark can be redrawn exactly at any size.</li>
</ul>
<p>The wordmark is set in Geist: "Tavor" in Medium and "Digital" in Regular, in grey, tracked slightly tight. The letters are converted to outlines by the same script, so the logo files work anywhere without the font installed.</p>
<h2 id="the-rules-that-came-with-it">The rules that came with it</h2>
<ul>
<li>Clear space around the mark is half its height.</li>
<li>Never redraw the ridge or rotate the mark.</li>
<li>Never put the two-tone mark on blue.</li>
<li>Test every change at favicon size, and in one colour.</li>
</ul>
</div>
<div class="b-text">
<p>The palette is deliberately small: one ink, one paper and one blue.</p>
</div>
<figure class="b-swatches is-column"><div class="b-swatches-grid"><div><span style="background: #05070b"></span><b>Ink</b><code>#05070b</code></div><div><span style="background: #f5f7fa"></span><b>Paper</b><code>#f5f7fa</code></div><div><span style="background: #2f6bff"></span><b>Blue</b><code>#2f6bff</code></div></div></figure>
<div class="b-text">
<h2 id="what-we-learned">What we learned</h2>
</div>
<figure class="b-quote is-wide"><blockquote><p>Perfect geometry looks wrong. Curves need a little optical overshoot to look right.</p></blockquote></figure>
<div class="b-text">
<p>Construction gets a mark most of the way there. The last part is optical: curves have to meet smoothly, without a visible kink where one arc hands over to the next, and round shapes have to be drawn slightly larger than square ones to look the same size. Proportion systems like the golden ratio were useful as a sanity check, not as a way to generate the shape.</p>
<p>And the most useful test cost nothing: shrinking the mark to the size of a browser tab and looking at it in one colour.</p>
</div>]]></content:encoded>
  </item>
</channel>
</rss>
