Rooted

Accessibility

Built to be used outdoors, one handed.

Rooted is opened in sunlight, on a phone, often while holding a watering can. That is the same set of constraints that good accessibility asks for, so it is built in rather than added afterwards.

Reading it

Body text sits at a line height near 1.8 and never drops below 13 pixels. Text is cream on a dark background rather than pure white, which is easier on the eye and still clears contrast requirements.

Nothing important is carried by colour alone. A task that is late says how late in words as well as in amber.

Touching it

Every control is at least 44 pixels tall, and the main action on any screen sits in the lower half where a thumb reaches.

Motion

The forest moves slowly and the reward animates. Both respect prefers-reduced-motion: turn motion down in your device settings and the page holds still, with nothing lost.

Sound is never automatic. It plays only after you ask for it, and it fades rather than cutting in.

The camera speaks

While the camera is open, the app says the one thing that would make your photograph pass: too dark, hold still, tilt down so the soil is in frame, that is it. It uses the voice your device already has, so there is nothing to download and nothing is sent anywhere.

It is there so that doing a task does not require reading a screen while holding a watering can. The same advice is always on screen as well, and the ring around the shutter turns green at the same moment, so nothing is only available as sound.

There is a control beside the instruction to switch the voice off, and the choice is remembered.

Screen readers

Headings are ordered, every control is labelled, and decorative artwork is hidden from the reading order. Photographs of plants carry the species as their description.

The verification result is read as a list of checks with a plain reason each, which is the same thing a sighted person sees.

Where it falls short

This is an early build. If something is hard to use, tell us at access@rooted.example and it gets treated as a bug rather than a request.