Go’s present tool really comes in handy when making some presentations. I’ve been using it heavily for the Japanese class I teach. It’s really a simplistic and easy to use piece of software.

My biggest problem is the index page. If I were doing talks on Go, I wouldn’t mind so much, but for my Japanese class it’s not really ideal. I wanted a way to host my slides without users getting confused by all the “Go Programming Language” or “Go Talks”. I could have created an index.html file and use a reverse proxy to route the present tool to /slides/* but then users might try and go to /slides and see the present tool’s index page.

I wanted a way to:

  • make my own index page
  • hide the default page
  • make sure users couldn’t accidentally access the original

This proved to be harder than I thought. I was using nginx on my server and ended up achieving the desired result though a lot of keyboard slamming and guessing (also StackOverflow).


Here’s the nginx config file in sites-enabled

server {
  listen 80;
  listen [::]:80;

  server_name gopresent.example.org;

  root /opt/learn-japanese-slides;

  location = / {
    try_files /index.html =404;

  location / {
    proxy_set_header  Host $host;
    proxy_set_header  X-Real-IP $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto $scheme;

    proxy_pass   http://localhost:3999;

It’s pretty helpful, I can keep my index.html in the root of my slide decks folder and commit it all at the same time.

Downsides to this Approach

In the original page, the slides are loaded dynamically. That is no longer the case. Now, every time I create a new slide deck, I have to manually create a link to it. Which isn’t too terrible. I can work on a slide deck and check it online before linking to it. Which has its benefits.