Skip to content
Writing

Bindersnap's new look, and why most of it isn't color

Bindersnap now has a warm redesign, its own home at bindersnap.com, the app at app.bindersnap.com, and a landing page that paints in 2.4 s on a phone.

On this page
  1. What Bindersnap is now
  2. The look: warm, on purpose
  3. Two addresses instead of one
  4. It had to be fast on a phone
  5. A public library, not just a pitch
  6. What is still hard

The filename that started all of this was something like IC_Policy_FINAL_APPROVED_Mar14.docx. If you have worked at a small clinic, hospice or home health agency, you have met its cousins. Somewhere there is a _v2, a _FINAL_final, and a version someone emailed to the administrator for sign-off that nobody can find again.

Bindersnap is my answer to that file. This month it got a new look, a new address for the app, and a public site with real pages on it. Here is what changed, and why most of it is not about color.

What Bindersnap is now

Bindersnap is policy and procedure management for small healthcare providers. Each policy keeps its current approved version and a record of who signed off on it, so when a surveyor asks which version was approved, the answer is on the page. Writers pay $39 a month each. Reviewers and readers cost nothing, and every organization starts with a 14-day trial with no card.

That is narrower than how I used to describe it. The old write-up called it “GitHub for everyone who doesn’t use GitHub”, which was true and helped nobody decide whether to try it. The people who feel this problem most are compliance and operations leads at small providers. They run approvals through Word, email and a shared drive today, and they have been asked “which version did we approve?” without a good answer. The redesign is built for that one person.

The look: warm, on purpose

Compliance software usually looks like it was designed to survive a procurement review. Gray tables, blue buttons, a dashboard of things you are late on. The person using it is already stressed. The interface should not add to it.

So the new identity goes the other way:

  • Type. Lora, a serif, for headlines. Geist for body text and UI. Geist Mono for labels, dates and version numbers. Three faces and no fourth.
  • Color. Warm paper backgrounds, a near-black ink, one coral accent and one green for approved states. Coral is rationed to one call to action per section.
  • Dark mode is designed, not inverted. Four warm-ink surface steps mirror the four paper steps in light mode.
  • Contrast is measured, not eyeballed. The brand coral, #e85d26, is only 3.49:1 against white, which fails WCAG AA for text. So coral is for fills and borders, and coral text uses a darker token that passes in both themes. That rule caught every form label in the sign-in page, which had been quietly failing.

The landing page’s headline sums up the tone better than I can:

The surveyor asks which version you approved. Show them.

When I audited the design system in August it scored 57 out of 100. The tokens were in good shape and everything built on top of them was not. The work since then has been unglamorous: a status color ramp, contrast fixes, token cleanup, and tests in CI that fail when someone hardcodes a hex value. None of that shows up in a screenshot. All of it shows up the third time you add a screen.

Two addresses instead of one

Until this month the marketing site and the app shared one origin. That meant every marketing page took a word an organization could not use as its name, and anything on the landing page also loaded for signed-in customers.

Now they are separate:

Each is a static build served from Cloudflare. Old links into the app redirect, and a missing page on the public site stays a 404 instead of quietly opening the app.

It had to be fast on a phone

A compliance lead is not always at a desk. The first mobile Lighthouse run of the new landing page found no largest contentful paint at all, and a first paint at 4.7 s. The page sat invisible until a 441 KB bundle had loaded and run. That bundle was React plus an icon library, and it was there to draw 30 icons.

The fix was to stop doing that:

  • The 30 icons became inline SVG. The landing page’s script went from 441 KB to 1.9 KB.
  • Nothing hides the page while it waits for a script.
  • Fonts preload with the page, and hashed bundles are cached for a year.

Locally, mobile Lighthouse went to performance 95, with first and largest paint at 2.4 s and 0 ms of blocking time. The sign-in page got the same treatment: the code it needs dropped from 478 KB to 41 KB, because the rest of the workspace now loads only after you are signed in.

A public library, not just a pitch

The part of the redesign I expect to matter most is the least visual. The public site now answers the questions people actually search for before they are ready to buy anything. Every page is plain HTML with nothing to run, has a Markdown copy, and is listed in the sitemap.

The help center walks through the product for someone who has never used version control:

Pages for each kind of provider, because a hospice and an ambulatory surgery center answer to different rules: home health agencies, hospices, ambulatory surgery centers, behavioral health programs, rural health clinics and medical practices.

Requirements, answered, for the questions that come up before a survey:

Free templates and tools you can use without signing up, including a policy on policies template, a hand hygiene policy template, an emergency preparedness policy template and a required healthcare policies checklist.

Honest comparisons, starting with the one most people are actually choosing between: policy software vs. a shared drive. There are also pages on PowerDMS, PolicyTech and PolicyStat.

A glossary for the vocabulary surveyors use, from controlled document to plan of correction and survey readiness.

Pricing is a public page with the number on it. The security page and privacy policy say plainly what the product stores, and Bindersnap holds no patient data at all.

What is still hard

It is still a solo project. A rebrand does not change that, and the backlog is longer than the list above. The pages are written, but nothing tells me yet whether the right people will find them. That is the next thing to measure.

What did change is that the product finally looks like it was made for the person who has to answer the surveyor, not for the engineer who built it. If that person is you, or you know them, the trial is here and the getting started guide shows how to move a policy manual in.

Let's connect

Spot something I got wrong?

Corrections, follow-up questions, or a war story of your own. I read every message and reply to the ones that aren't a template.

Email me

Usually replies within a day or two · St. Louis, Missouri

ESC

Home

Main landing page & highlights

Page

Work

All engineering projects & case studies

Page

Writing

Technical notes & engineering articles

Page

Games

Browser games, several against real models

Page

About

Background, career timeline & skills

Page

Contact

Email, inquiries & consultation

Page

Copy Email Address

davidgraymi@gmail.com

Action

Toggle Light / Dark Theme

Switch color theme

Action

Resume

Web page, with a PDF download

Read

Visit GitHub

github.com/davidgraymi

External

Visit LinkedIn

linkedin.com/in/david-gray-mi

External

Beat the bot

Tetris against the value network from my reinforcement-learning project. Same pieces, two minutes, most lines wins.

Game

Draw a digit

Draw 0–9 and watch a weighted KNN classifier find its nearest MNIST neighbours as you go.

Game

Is it poisonous?

A real mushroom from the UCI dataset. Make your call, then watch an ID3 decision tree make its own.

Game

Route the robots

Draw a warehouse, place robots and goals, and race a LaCAM multi-agent path-finding solver to the shortest plan.

Game

Daily Wordlet

One five-letter word a day, the same for everyone. Six guesses.

Game

Bot or human?

14 rounds. One line from a public-domain classic, one written by a language model. Spot the bot.

Game

Reaction test

Wait for the panel to light up amber, then hit it as fast as you can.

Game

Lost signal

The 404 page's dodge game. Packets rain down; steer the receiver out of the way.

Game

neural-cost

A framework-neutral Python library that tells you how fast a neural network should run, not just how fast it does — FLOPs, tensor traffic and a roofline model across PyTorch, JAX and TensorFlow.

Personal

Sign Language Interpretation System

Control any smart device with American Sign Language — hand tracking, a gesture classifier and grammar correction, wired together over a client-server link.

Capstone

Patient Care Portal Triage

An NLP pipeline that routes patient portal messages to the right team and surfaces relevant evidence-based research while they wait for a human.

Research

Threat modeling a zero-trust deployment pipeline

A continuous deployment pipeline for configuration-as-code and infrastructure-as-code into Kubernetes, designed from its threat model outward so the release process does the security review.

Professional

Moving three toolchain apps to Kubernetes on Azure

Three toolchain applications moved to Kubernetes on Azure, deployed one way with Helm and infrastructure-as-code, and secured with an Istio service mesh.

Professional

A processor built from the ground up

Kernel, task scheduler and communication protocol written from nothing, in C and Ada, now in production and distributed globally.

Professional

A system library that runs anywhere

One portable C++ library targeting any RTOS or bare-metal system, packaged with Docker, Bazel and GitLab CI — cutting porting work by 4×.

Professional

LaCam for Multi-Agent Path Finding

A from-scratch LaCam solver for CS440 — agents searching a space of joint configurations, each expanded by a constraint tree that rules out collisions and swaps.

School

Bindersnap

Policy and procedure management for small healthcare providers, where every approved version keeps a record of who signed off on it.

Personal

Wordlet

A word guessing game built in Flutter and compiled to the web — playable right here, no install, no account.

Personal

Reinforcement Learning applied to Tetris

An agent that learns to play Tetris — a genuinely fun excuse to get hands-on with reward shaping.

School

Handwritten digit recognition with weighted KNN

A KNN classifier for handwritten digits, plus a k-value optimizer that collapses repeated distance calculations into a single pass.

School

ID3 mushroom classification

A from-scratch ID3 decision tree that predicts whether a mushroom is edible or poisonous from its attributes.

School

Healthcare length-of-stay estimator

A data mining project predicting how long a patient will stay, from admission-time features.

School

This website

A static site built with Astro, hosted free on GitHub Pages, designed so writing a post costs one markdown file and nothing else.

Personal

Bindersnap's new look, and why most of it isn't color

Bindersnap now has a warm redesign, its own home at bindersnap.com, the app at app.bindersnap.com, and a landing page that paints in 2.4 s on a phone.

Post

An Unexpected Email, REPRO-SIGN, and 11 Citations on Google Scholar

Years after our college capstone, an out-of-the-blue email from European AI researchers wanting to reproduce our sign language paper sent me to Google Scholar, where we've been cited 11 times.

Post

Connecting the Dots: How a Sign Language Capstone Got Me Hooked on AI

Looking back at my senior capstone project at Missouri State — building a real-time American Sign Language smart home controller with MediaPipe, custom CNNs, and networking — and how it sparked my path in machine learning.

Post

GPU vs. CPU: Roofline Benchmarks on Apple Silicon MPS with neural-cost v0.2.0

The neural-cost v0.2.0 GPU benchmark moves from CPU roofline analysis to Apple Silicon's MPS GPU backend — measuring PyTorch and JAX across five architectures, four batch sizes, and both eager and compiled execution modes.

Post

PyTorch vs. JAX vs. TensorFlow: A Roofline Benchmark Across 5 Architectures

An empirical investigation comparing PyTorch 2.14, JAX 0.11, and TensorFlow across five model architectures and four batch sizes, measuring compiler speedups, kernel overheads, and hardware limits on Apple Silicon.

Post

neural-cost: Roofline Analysis Across PyTorch, JAX, and TensorFlow

A framework-neutral Python library that estimates a neural network's FLOPs and tensor traffic, measures its runtime, and uses a roofline model to tell you exactly where performance is being left on the table.

Post

I rebuilt this site so that publishing costs one file

The old site was a single 41,000-character index.html. Every change was archaeology. Here is what I replaced it with and why the constraint was maintenance, not design.

Post
↑ ↓ to navigate↵ to select
esc to close

Terminal