Skip to content
Business Agile
← Work
App · Services for fitness clubs, subscriber area · Dec 2017

PrevenFit

A subscriber area that answers only if you already know exactly what to look for.

The PrevenFit search screen, three fields and one button

Key figures

fields required, all exact, to get an answer3
near results returned by the search0
containerised environments at delivery3

M.A.D. Marketing was launching PrevenFit, a service for fitness club managers. The marketing site already existed on WordPress, but the subscriber area had been prototyped alongside it and did not hold up. We were asked to design it properly, and it became a standalone Django application.

In pictures

Three-field search form: first name, surname and date of birth
The subscriber area's search screen, empty. The three fields are all required and all exact: without all three the tool does not answer, and there is no screen anywhere that lists the people on file.

The project in detail

The design was driven by a constraint I set from the start: the tool handles personal data, so it must reveal as little as possible. The search accepts no near matches. It requires the first name, the surname and the date of birth, and answers only on an exact match of all three. You therefore cannot browse the file, nor list it, nor guess your way through it: you can only confirm a record you already hold. The model also enforces uniqueness of the triple, which stops duplicates accumulating.

Sign-in is the same for every account. The role stored in the database decides what appears after authentication, the subscriber interface or the administrator's, rather than exposing two different front doors. The subscriber area fits on a single page: the header, the three-field search form, the results area. Nothing else, because nothing else was useful.

Administration is split in two, subscriber account management and data management. Each row carries its actions: edit, delete, enable or disable an account, show or hide a record in search results. Entries are added one at a time or by importing a file following a template we provided, because a client who has to type several hundred rows by hand will not do it.

On the industrial side, the application started from a proven Django skeleton rather than a blank page: configuration through environment variables, dependencies split between development, test and production, Docker containers for all three environments, a gunicorn server in production, tests under pytest with coverage measurement and a gulp chain for the stylesheets. For an application this size, that is the difference between a prototype and something you can operate.

The image on this page is the empty form, and it is the only state of this tool that can be shown: any other screen would display personal data. It happens to be the right one, because it says what the product is. Three fields, one button, nothing else on the page.

What was done

  1. 01

    Exact-match search on three fields, no near results

  2. 02

    No way to browse or list the data

  3. 03

    Uniqueness of the triple enforced by the model, no duplicates

  4. 04

    Single sign-in, interface decided by the role in the database

  5. 05

    Account and data administration, with file import

  6. 06

    Three containerised environments, pytest tests and coverage

Frequently asked questions

How do you limit what a tool reveals about personal data?

By refusing approximation. On PrevenFit the search accepts only an exact match of first name, surname and date of birth: the tool confirms a record you already hold, it does not let you browse the file or reconstruct it by trial and error.

Do users and administrators need two sign-in pages?

No. On PrevenFit a single sign-in form serves everyone, and the role stored in the database decides which interface appears. One front door is also one surface to protect.

Why plan a file import in the very first version?

Because manual entry kills the tool. On PrevenFit entries are added one at a time or by importing a file following a provided template, which lets the client populate the service from day one.

Other work

A project? Let's talk this week.

A short brief, an answer within 48 hours, a firm estimate after scoping.

Describe my project