10k Apart: 10k Slides

9.28.2019

Creating a presentation application in as many bytes as a favicon.

Many years ago—long after it was over—I heard about the 5k challenge. Reading about the event was inspiring. Constraints breed creativity. Making things small and fast is worthwhile. It hones our skills and generates new techniques that allow us to optimize when working on larger projects.

To this day, one quote from the article sticks in my mind.

Halfway through the judging, we hated this contest. Not because the work was bad. But because so much of it was so very, very good.

—Jeffrey Zeldman

I was jealous, sad I missed out.

Luckily, in 2016, A List Apart and Microsoft teamed up to run the event again. It was called 10k Apart. I wrote a presentation application called 10k Slides.

A title slide presented in 10k Slides
Presentations in 10k Slides look like other browser-based presentations

10k Slides received an honorable mention. I was delighted. Looking around at the other entries, I was floored by the level of quality.

10k Apart serves as an inspiration in a time when many pages weigh 1000 times that (really, 10mb).

10k Slides

10k Slides is a browser-based presentation application that uses no libraries. It's an application I occasionally use at work for simple presentations. It is simple and fast.

To see the results, check out the GitHub repo or the hosted version.

The slideshow is written in a text area using a lightweight format inspired by Markdown. (If I were to do this again, I would more use a flavor of Markdown).

The editor in 10k slides, with the default text in it
10k Slide's editor uses a blank line between slides. The first line of each slide is its title.

The slideshow is saved using local storage.

Generating the slideshow is isomorphic. When JavaScript is enabled, the slideshow renders and displays as a single page application. When JavaScript is not enabled (or is broken, or the user is faster than JavaScript loading), the slideshow text is sent to a Node server which generates and returns the slideshow. This version of the slideshow uses anchor tags and hashes to link between slides, making the slideshow interactions possible with only CSS.

The techniques behind the non-JS CSS interactions discussed in CSS3 Interactive Interfaces.