gopherden: Forum via Gopher Protocol
        
                             _                     _                _ 
         __ _   ___   _ __  | |_    ___   _ _   __| |  ___   _ _   (_)
        / _` | / _ \ | '_ \ | ' \  / -_) | '_| / _` | / -_) | ' \   _ 
        \__, | \___/ | .__/ |_||_| \___| |_|   \__,_| \___| |_||_| (_)
        |___/        |_|                                              
        
         ___                            
        | __|  ___   _ _   _  _   _ __  
        | _|  / _ \ | '_| | || | | '  \ 
        |_|   \___/ |_|    \_,_| |_|_|_|
                                        
        
               _        
        __ __ (_)  __ _ 
        \ V / | | / _` |
         \_/  |_| \__,_|
                        
        
          ___                _                
         / __|  ___   _ __  | |_    ___   _ _ 
        | (_ | / _ \ | '_ \ | ' \  / -_) | '_|
         \___| \___/ | .__/ |_||_| \___| |_|  
                     |_|                      
        
         ___               _                      _ 
        | _ \  _ _   ___  | |_   ___   __   ___  | |
        |  _/ | '_| / _ \ |  _| / _ \ / _| / _ \ | |
        |_|   |_|   \___/  \__| \___/ \__| \___/ |_|
                                                    
        
       ╔─*──*──*──*──*──*──*──*──*──*──*──*──*──*──*──*──*──*──*──*─╗
       ║1   ....................................................   1║
       ║2*  ....................................................  *2║
       ║3   ....................................................   3║
       ║1   .................Posted: 2024-03-10.................   1║
       ║2*  Tags: gopher haskell nix showcase my_warez my_servs   *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."
        
       # 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
        
       # 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:
        
        
       # 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
        
 (HTM) [1]: gopherden: https://github.com/someodd/gopherden/
 (TXT) [2]: Gopher Protocol: /tags/gopher
 (HTM) [3]: via the web: https://gopher.floodgap.com/gopher/gw?a=gopher%3A%2F%2Fgopher.someodd.zip%3A7070%2F
 (TXT) [4]: via the Gopher Protocol (as intended): gopher://gopher.someodd.zip:7070/
 (TXT) [5]: my post about the Gopher Protocol: /notes/gopher
 (TXT) [6]: my about page: /about
 (HTM) [7]: Create an issue on the gopherden GitHub repo: https://github.com/someodd/gopherden/issues
 (HTM) [8]: The project's README.md: https://github.com/someodd/gopherden/blob/master/README.md
 (TXT) [9]: This site's gopher tag: /tags/gopher
 (TXT) [10]: My post about the Gopher Protocol: /notes/gopher
 (HTM) [11]: gopherden GitHub repo: https://github.com/someodd/gopherden
 (TXT) [12]: gopher://gopher.someodd.zip:7070: gopher://gopher.someodd.zip:7070
 (TXT) [13]: my article on the Gopher Protocol: /notes/gopher
 (TXT) [14]: my Gopher Protocol client, "waffle": /showcase/waffle
 (HTM) [15]: Lagrange: https://gmi.skyjake.fi/lagrange/
 (HTM) [16]: gopherden is open source: https://github.com/someodd/gopherden
 (HTM) [17]: Spacecookie: https://github.com/sternenseemann/spacecookie