THE IDEA

Writing apps are built to make text frictionless: undo, autocorrect, infinite backspace. That's great for work and terrible for a first draft. A typewriter makes you commit to every letter.

Typewriter rebuilds that feeling on glass. Backspace only moves the carriage back; typing again overstrikes the letter that's already there. When you get near the right margin, the bell rings.

HOW IT WORKS

THE MACHINE

  • Moving Paper: The strike point never moves. The sheet slides left under it as you type and climbs a line on every carriage return.
  • Typebars: Each key maps to one of the bars fanned out in the basket. That bar swings up to the platen on every keypress.
  • Real Controls: The return lever, shift, shift lock and a two-color ribbon. Drag the paper to turn the platen knob.
Typewriter with a sheet in the carriage

IMPERFECT INK

  • Per-Strike Jitter: Every letter is stored with its own small offset, rotation and ink density, so no two e's look the same.
  • Under-Inking: About a third of strikes fade on one side, like a slug hitting the ribbon unevenly.
  • Bleed: Each line is drawn into a Canvas with a slight blur, as if the ink soaked into the paper fibers.

SYNTHESIZED SOUND

  • No Samples: Every sound is generated when the app launches, from filtered noise bursts and decaying sine partials.
  • A Key Strike: The slug hits the platen, the steel typebar rings briefly, the escapement clicks, then the bar drops back. Six variants rotate so it never sounds like a loop.
  • The Return: Line-space ratchet clicks, the carriage slides along its rails, then a thud against the margin stop, with a heavy haptic timed to it.

THE DRAWER

  • Finished Sheets: Feed a new sheet and the old one lands in the desk drawer.
  • Roll It Back In: Any archived page can go back into the machine, with the carriage on the next empty line.
  • Share: Export a page as a high-res image, or copy it as plain text. Where a cell was overstruck, the last letter wins.

TECHNICAL APPROACH

SwiftUI & Canvas

The whole machine is drawn in code. Equatable line views mean only the line being typed redraws

AVAudioEngine Synth

A tiny additive/subtractive synth renders PCM buffers, played through a pool of 12 player nodes

@Observable Model

Carriage, shift, ribbon and sheets in one model, saved as JSON with a debounced write

Hardware Keyboards

Works with a physical keyboard too. Arrow keys roll the platen, return pulls the lever