CASE STUDY · AN ACCOUNTING PRACTICE AND A FILM PRODUCTION AGENCY

Websites the owner can actually edit

Two firms paid a developer to change a paragraph. Both now run their own sites — pages, images, menus — and one moves 40 GB of client files too.

Industry
Professional Services
Timeline
3 to 5 weeks each · ongoing support
PythonFlaskPostgreSQL2FAResumable uploads

THE PROBLEM

Changing one sentence on the services page meant emailing a freelancer, waiting three weeks, and paying for a paragraph. So the site stopped changing, and then it stopped being true.

  • 0developer tickets to edit a page
  • 9admin screens, no training
  • 200 GBper client upload link
  • 32 MBresumable upload chunks
The Websites the owner can actually edit system in use

The problem

Two firms, one complaint. Every change to the website went through somebody else.

The accounting practice paid a freelancer — or waited three weeks — every time a service description changed, a new staff bio went up, or the menu needed reordering. Enquiries arrived as forwarded emails and got lost in an inbox. The admin login was a password everybody knew.

The production agency had the website problem plus a bigger one: moving footage. A client with forty gigabytes of camera files either bought a cloud storage seat, split the delivery across five transfer links that expired within the week, or drove a hard drive across town. When the browser tab crashed at eighty percent, the whole thing started again. And nobody could remember which client had sent which take.

What we built

Two sites, one idea: everything that changes regularly should be editable by the people who own it.

The accounting site ships with a full admin. Create and edit pages in a proper editor, publish or unpublish separately from saving, keep an image library with alt text, drag the navigation into order including nested menus, edit site settings, set up email with a test-send button, and work through a read/unread inbox of enquiries. The admin account is protected by an authenticator app — the setup code is generated on their own server, so nobody else ever sees it — with a lockout after five failed attempts and sessions held server-side rather than in a cookie.

The agency site adds the file problem. Its uploader works in careful steps: register the file, send it in 32 MB pieces, then finish. The server, not the browser, keeps track of how much has arrived. A piece that turns up in the wrong place is rejected along with the right position, and the browser picks up from there, retrying with growing gaps. Before the server moves its marker, the file is safely written to disk and trimmed back to the last good point, so a crash costs one piece at most. Starting an upload again for the same file just continues it, which means a closed laptop, a browser restart or a dropped connection all resume exactly where they stopped. On completion the server re-reads the file and checks it matches; if it doesn’t, the upload resets rather than accepting bad data.

Client links are created with a label, an expiry date, a size limit and a file limit, are stored only as a fingerprint — the address is shown once and can’t be read back out of the system — and can be revoked in one click. Downloads are handed off to the web server rather than tying up the app, which makes them resumable for free.

The result

Both firms edit their own sites. Pages, images, menus and settings change on the day someone decides they should, which means the site stays true instead of slowly going stale between retainer invoices.

Enquiries land in an inbox with a read state instead of an email thread. The accounting site’s whole admin was built and shipped in a day, and has needed two small fixes in the six months since — which is about the right amount of attention for a website.

The agency stopped paying per seat for file transfer, and stopped losing uploads at eighty percent. A producer sends one labeled link with an expiry and a size limit, and the footage arrives checked.

Why it holds up

  • Content is cleaned on the server. Only known-safe tags and attributes survive, links are checked, and scripts are dropped along with their contents — so pasting in a document can’t bring anything executable with it.
  • Uploads survive a crash by design, not by luck: write, flush to disk, then move the marker. There’s also a free-space floor that refuses new pieces rather than filling the drive.
  • Database changes take turns, so several copies starting at once can’t apply them twice, and the app refuses to create an admin account without a password you supplied.
  • One command handles install, update, certificate renewal and removal — including a DNS check before requesting a certificate, backups before every update, and automatic renewal that reloads only the web part, for a few seconds.
I changed the services page myself on a Tuesday morning. Previously that was an email and a three-week wait. The upload links are the other thing — clients stopped asking us for a Dropbox folder.
Practice Manager, professional services Professional Services

NEXT STEP

Have a similar problem?

We've probably seen a version of it before, and we can tell you quickly whether it's worth building.

Book a call

A 30-minute call. No slide deck, no obligation.
We reply within one business day.