← Work

Website & back office · nonprofit

Tawrirt El Goléa

An Algerian charity founded in 2002, in the oasis of El Goléa. It runs a library, a charity centre, an eco-park and guest houses. I delivered the full public website, a back office the team uses on its own, and a database migration carried out without taking the service down.

01

The problem

The team had to go through an outside contractor to publish the smallest piece of news.

The charity has more than twenty years of activity, four operations to run, and donors, sponsors and visitors to look after. Nobody inside could change the website. A photo to swap, a date to correct, an announcement to publish: each request went outside and waited its turn.

Its audience is spread across Algeria, France and the diaspora, and does not read the same language from one country to the next. A site published in a single language therefore left out part of the donor base, whichever language was chosen.

02

What I built

The public site

The site presents the charity and its four operations. It carries the news with one page per article, a donation page, a sponsorship flow, a stay booking, a contact form and the legal pages that collecting personal data requires. Everything is rendered on the server, so each page is indexable by search engines and displays correctly when someone shares it.

The back office

The team has a protected area to follow donations, sponsorship requests and bookings, and to manage the content of the site. Data administration is generic: one list, create, edit and delete mechanism serves every entity, instead of rewriting the same screen for each type of record.

The languages

Translation is handled on the server, with a central dictionary and metadata of its own for each language. Each language has its own addresses and its own pages, which gives it its own search ranking.

The migration

The old system ran on Firebase. I moved everything to PostgreSQL: a full export of what existed, a transformation into the new schema, timestamped backups before and after the operation, a record count on each side. The site stayed online for the whole switch and no data was lost.

03

What was hard

Migrating a live database

A migration is run as a procedure, with steps you can check one at a time. Moving from a document model to a relational model forces you to settle questions that stayed vague for years. What exactly is a sponsorship? What do you do with a donor recorded without an address?

My working rule is always the same: back up before, back up after, count the records on both sides, and keep the ability to return to the previous state at every step. That last condition is what allows the switch to be run on the real database rather than on a copy.

Handling languages from the design stage

When translation is added afterwards, the visible content goes through but the metadata stays in the original language, and search engines only ever see one version of the site. Deciding up front that each language has its own addresses costs a little more work at the start and saves rebuilding everything later.

Designing for volunteers

The back office is used by volunteers, not by people trained on the tool. Input is validated strictly and error messages are written in everyday French. A wrong move cannot break a public page. The labels use the charity's own vocabulary, and the team publishes its news without going through me.

What I take from it

A charity on a tight budget cannot pay a contractor every time a photo needs changing. So I treated the team's autonomy as a project requirement on the same level as the features: the back office and its wording were designed to be used without me.

04

The stack

A site to rebuild, a database to move?

An ageing site, a vendor who left, data stuck in an old system. Describe the situation and I'll tell you what the takeover involves, in work and in time.

contact@adelzemiti.com