Here’s a joke config to put in your conf.d directory as coin-conf.pl…
package App::Phoebe; use Modern::Perl; our (@extensions); push(@extensions, \&serve_coin); sub serve_coin { my $stream = shift; my $url = shift; my $headers = shift; my $host = host_regex(); my $port = port($stream); if ($url =~ m!^gemini://($host)(?::$port)?/do/coins$!) { result($stream, "20", "text/gemini"); $stream->write("# GemCoin Exchange\n"); $stream->write("=> /do/coins/balance GemCoin Balance\n"); $stream->write("=> /do/coins/transfer GemCoin Transfer\n"); return 1; } elsif ($url =~ m!^gemini://($host)(?::$port)?/do/coins/balance$!) { result($stream, "20", "text/gemini"); $stream->write("# GemCoin Balance\n"); $stream->write(sprintf("Your current balance: %.2f gems (%.2f \$)\n", rand(100), rand(10000))); $stream->write("=> /do/coins GemCoin Exchange\n"); $stream->write("=> /do/coins/transfer GemCoin Transfer\n"); return 1; } elsif ($url =~ m!^gemini://($host)(?::$port)?/do/coins/transfer$!) { result($stream, "10", "Recipient Mastodon Account"); return 1; } elsif ($url =~ m!^gemini://($host)(?::$port)?/do/coins/transfer\?(.*)$!) { my $r = $2; result($stream, "20", "text/gemini"); $stream->write("# GemCoin Transfer Success!\n"); $stream->write("We sent the indicated amount to $r.\n"); $stream->write(sprintf("Amount deducted: %.2f gems\n", rand(10))); $stream->write(sprintf("Your current balance: %.2f gems\n", rand(100))); $stream->write("=> /do/coins/balance GemCoin Balance\n"); $stream->write("=> /do/coins/transfer GemCoin Transfer\n"); return 1; } return; } 1;