Ptolemy: CMS and Content Model
How tours, destinations and stories were modelled and stored
- Client
- Ptolemy
- Year
- 2022
- Before
AI - Subject
- Web development
- Tags
- Backend, Geodatabase, Product
- Result
- Strapi content model, AWS hosting, WordPress writing space with custom content types
What I did
Heritage travel app Ptolemy’s content was written by people: destination guides, stories, and audio tours made of chapters along a route. Before building the app, we had to decide what that content would look like and where it would live.
The first version, in 2022, ran on Strapi, a headless CMS, hosted on AWS with images on S3. I set up the main content types:
- Destinations, the cities and regions we covered.
- Tours, with a route, a start and end point, duration, difficulty and chapters.
- Stories, shorter pieces about a place or a person.
- Writers, and books we recommendeded for further reading.
Content was built from blocks like chapters, galleries, headings, videos and sources, with an era and a culture on each piece, so readers could filter by period. Chapters got coordinates, so each one could sit at a stop along tour routes.
In late 2022 we moved the writing to a self-hosted WordPress instance, which was easier for our writers, and the content itself to Supabase. There, every type of article sat in one table, tagged by place, era, culture, topic, historical figure and series. Prepared views on Supabase gave the app what it needed: full-text search, related articles nearby, and filters by distance, duration and difficulty. The views were refreshed whenever content changed, via webwooks.
Writing in WordPress
With the Advanced Custom Fields Pro WordPress plugin I added content types and fields that matched our content model above. Saving a tour in WordPress triggered the Ptolemy API, which copied it to the database, generated its audio and refreshed the page in the app. That way a writer could publish a new tour without anyone on the tech side being involved.
The WordPress UI was also customized to make it easier for writers to engage with the content and understand chapter hierarchy while creating content.
