Skip to main content
Eystein codes

IxDA Norway

Screenshot of an individual talk page. The page contains navigation, an embedded video, heading, information about the talk and speaker, and metadata about time and place.

Situation #

The Norwegian part of IxDA, the Interaction Design Association, has over 1000 members, runs regular events which are recorded and shared, has local groups around the country, and a website made with Squarespace.

That was good enough to start with, but as they've grown in membership and services they've added third-party services for event registration, video streaming and recording. These new services did not integrate well with the site, if at all.

The content had also outgrown its baby shoes. We now needed categories for future, current and past events, talks, speakers, podcasts, sponsors, articles, volunteers and probably some things I'm forgetting now. And to top it off – a flexible way to connect everything. An event would include multiple talks, which could have multiple speakers, with one or more videos, sponsors sponsoring various parts, volunteers with various roles. The list went on.

Now, IxDA isn't just any client, they are Interaction Designers after all, with a good idea of what they want out of websites.

Fredrik Matheson, the driving force in IxDA Norway, UX connoisseur and all-round amazing person wished to collect all these loose parts into a single source of truth, in addition to getting full control of content management, architecture and design.

Solutions #

In order to have the flexibility needed to connect all types of content while having a good content structure for the site's editors, we opted for a headless CMS for the back-end. A headless CMS is a content management system that separates the presentation (the website you see in your browser) from the content (where you enter and organise information).

Back-end #

Thus I built the backend in the Sanity Studio headless CMS. Sanity treats all content as data, which can be accessed through APIs. Anything that can use an API can then be used to display the information stored in the CMS.

The CMS itself if is very flexible, which allowed me to set up a structure that the editors are the most comfortable with. And with a good overview of the information architecture from the outset, I was able to let the CMS grow in size and scope as the project went on.

The editors are now able to connect talks to events, speakers to talks, members to roles, sponsors to events and on and on. The cross-referencing is used extensively to keep the paths of information within the site connected.

Screenshot of the custom Sanity Studio dashboard, in 3 columns. First columns lists the various content types such as Events, Talks, Articles and more. It is focused on Talks, that is listed in the second column. A single talk is selected and its settings displayed in the last column.
The Sanity CMS, with one of the talks selected.

Custom CMS functionality #

Front-end #

The front-end information structure does not always follow the back-end structure. In traditional CMS' this is often a source of friction, but thanks to the headless CMS format this problem is eliminated.

I chose the Sveltekit library for this front-end work. Sveltekit is very developer friendly, and more importantly, doesn't add any JavaScript to the user unless I specify so.

That makes the site more secure, less likely to fail, and fast! This is possible thanks to Sveltekit’s ability to build with SSG (static site generation) in most places, and progressively enhance with SSR (server side rendering) and SPA (single page app) on the more dynamic pages.

The site is hosted at Vercel, which rebuilds the site when a change is committed to GitHub, or new content is published via Sanity.

HTML and CSS hand-crafted with love ❤️ #

Writing traditional CSS instead of relying on a library gave us full freedom to explore designs together, which was an important part of the development process.

The HTML is structured to be accessible to all, humans and robots.

Results #

Happy client #

Because of the flexibility of both Sanity and Sveltekit we've been able to try out any and all concepts that we've come up with. The event registration is now integrated in the website, events and talks are the two main areas, both of which contain a lot of metadata collected from different sections of the CMS, but presented as one in the front-end.

Lessons learned #

The editors could start entering content into the CMS while it was still under development. Following that, we had a lot of real content to work with before starting the development of the front-end. This avoided second-guessing and using dummy contents.

Skills gained #

This project improved my JavaScript, Groq querying API calling full-stack developer head, which I quite enjoyed. Yet thanks to Sveltekit I was able to keep the code clean with focus on qualities such as performance, mobile responsiveness, user experience and accessibility.


References #

  1. The IxDA Norway website.
  2. Sanity headless CMS.
  3. Sveltekit.

← Back to Portfolio