gopherden: Forum via Gopher Protocol

                     _                     _                _
 __ _   ___   _ __  | |_    ___   _ _   __| |  ___   _ _   (_)
/ _` | / _ \ | '_ \ | ' \  / -_) | '_| / _` | / -_) | ' \   _
\__, | \___/ | .__/ |_||_| \___| |_|   \__,_| \___| |_||_| (_)
|___/        |_|

 ___
| __|  ___   _ _   _  _   _ __
| _|  / _ \ | '_| | || | | '  \
|_|   \___/ |_|    \_,_| |_|_|_|


       _
__ __ (_)  __ _
\ V / | | / _` |
 \_/  |_| \__,_|


  ___                _
 / __|  ___   _ __  | |_    ___   _ _
| (_ | / _ \ | '_ \ | ' \  / -_) | '_|
 \___| \___/ | .__/ |_||_| \___| |_|
             |_|

 ___               _                      _
| _ \  _ _   ___  | |_   ___   __   ___  | |
|  _/ | '_| / _ \ |  _| / _ \ / _| / _ \ | |
|_|   |_|   \___/  \__| \___/ \__| \___/ |_|


╔─*──*──*──*──*──*──*──*──*──*──*──*──*──*──*──*─╗
║1   ........................................   1║
║2*  ........................................  *2║
║3   ........................................   3║
║1   ...........Posted: 2024-03-10...........   1║
║2*  ...Tags: gopher haskell nix showcase ...  *2║
║3   ........................................   3║
║1   ........................................   1║
╚────────────────────────────────────────────────╝

gopherden[1] is forum software for the Gopher Protocol[2]. View the official
gopherden server via the web[3] or via the Gopher Protocol (as intended)[4] (you
may want to read my post about the Gopher Protocol[5]).

I'm thinking about renaming it to "phorum."

* TOC {:toc}

# Features (Users/Visitors)

Features for the people who use a gopherden:

* Transient content. Old threads are deleted. There's max thread count, when
 reached and a new post is made, the oldest one gets erased.
* Anonymous, except IPs are associated with posts for banning and legal purposes
* View threads as gopher maps or as text files (ASCII art, kind of)
* Prevents some accidental reposting by refreshing
* Prevents new threads being created where the message/content is the same as
 another in the DB
* "Secret codes" which allow you to use codes like `<jgsBagOfMoney>` to
 potentially show an ASCII art picture
* Rate-limiting (how fast you can make new threads or posts)
* Handles/parses Gopher and HTTP(S) URIs into menu/map items

# News

[news from my blog about gopherden]

# Known issues

* No real bot prevention. A captcha-like system could be implemented.

# Feedback

* Contact me using a method mentioned on my about page[6]
* Create an issue on the gopherden GitHub repo[7]

# Who's using, in the news

Some other instances, notable users...

# Documentation and tutorials

* The project's README.md[8]

# See also

* This site's gopher tag[9]
* My post about the Gopher Protocol[10]
* gopherden GitHub repo[11]

# Post on the official server!

This feels kind of redundant.

Official *gopherden* server at gopher://gopher.someodd.zip:7070[12]. You may
want to read my article on the Gopher Protocol[13] for help on browsing
gopherspace.

You can use my Gopher Protocol client, "waffle"[14] to visit the forum!

You can use `gopher` (`sudo apt-get install gopher`) and then use `gopher -p "/"
gopher.someodd.zip 7070`.

You could also use Lagrange[15], which has a client for Linux, MacOS, Windows,
Android, and iOS.

Below is a photo of me using Lagrange to visit the forum on my phone:

!Langrange client on a phone, visiting a gopherden forum =>
/assets/showcase/gopherden/lagrange-gopherden-phone.png.

# Want your own gopherden or want to develop?

gopherden is open source[16].

## Developer and Server Features

Features for those who host or develop (a) gopherden:

* Written in Haskell
* TOML configuration spec. First time I implemented a TOML config and I find it
 decent.
* Uses Spacecookie[17], a wonderful Gopher Protocol library. I've worked with
 the author before.
* CLI for banning

I'm leveraging `nixpkgs` to:

* Make it very easy on me to build and deploy, particularly on my server
* Have a development environment that sets up/takes down postgresql for me,
 which also helps with deploying a little demo server I'm hosting now. It also
 wipes the database on exit, too.

## Setting up a server

As of the time I'm writing this I don't have a `systemd` integration or Debian
package, so a set up I like and think is simple/easy:

1. clone the repo and `cd` into it
1. make sure `nixpkgs` is installed on your system with `experimental-features =
 flakes nix-command` in your `~/.config/nix/nix.conf`
1. start a GNU Screen session `screen -S services`
1. `nix develop`
1. `nix run .#gopherden -- launch`

There you go! Keep in mind if you send the exit signal (I think) inside of `nix
develop` the database gets wiped.

## Footnotes

[1]: gopherden: https://github.com/someodd/gopherden/
[2]: Gopher Protocol: /tags/gopher
[3]: via the web: https://gopher.floodgap.com/gopher/gw?a=gopher%3A%2F%2Fgopher.someodd.zip%3A7070%2F
[4]: via the Gopher Protocol (as intended): gopher://gopher.someodd.zip:7070/
[5]: my post about the Gopher Protocol: /notes/gopher
[6]: my about page: /about
[7]: Create an issue on the gopherden GitHub repo: https://github.com/someodd/gopherden/issues
[8]: The project's README.md: https://github.com/someodd/gopherden/blob/master/README.md
[9]: This site's gopher tag: /tags/gopher
[10]: My post about the Gopher Protocol: /notes/gopher
[11]: gopherden GitHub repo: https://github.com/someodd/gopherden
[12]: gopher://gopher.someodd.zip:7070: gopher://gopher.someodd.zip:7070
[13]: my article on the Gopher Protocol: /notes/gopher
[14]: my Gopher Protocol client, "waffle": /showcase/waffle
[15]: Lagrange: https://gmi.skyjake.fi/lagrange/
[16]: gopherden is open source: https://github.com/someodd/gopherden
[17]: Spacecookie: https://github.com/sternenseemann/spacecookie