~alexwennerberg/flounder

a portal into the small web

b3f4c42 redirect file to file.gmi if not found

7 days ago

c725477 add basic outgoing error handling

7 days ago

#Flounder!

NOTE: Master is not currently stable. Flounder is currently under very active development, and probably not ready for you to deploy unless you are also actively developing it.

An ultra-lightweight Gemini web portal. View online at https://flounder.online/

I'm really interested in the ideas behind Tildeverse and the IndieWeb, and wanted to make an application that takes some of the ideas behind these communities and makes a radically simple and easy-to-use version of it. Neocities was another big inspiration: giving users the power and transparency of directly editing HTML, while making the process accessible and easy to learn. Gemini is such a straightforward protocol that making a static website becomes even easier!

Maybe Future Feature Ideas:

#Development

Requires sqlite3 libraries

To run the development server:

cargo build .
# Apply the schema
sqlite3 < schema.sql flounder.db
# Run development server
./target/debug/flounder run --config example_config.toml

#Deployment

Flounder's ultimate goal is to be able to be easily self-hosted. If you're careful and know what you're doing, you could ry deploying it, but I haven't written any guides on how to do so yet. The Actix server is not secure as-is, I use Nginx to handle a lot of the proxying. I'll share resources when this is more stable.

Here's a rough outline of things you'll need to configure your server to do:

  • xss protection in production
  • tls in production
  • block /user (this prevents xss. Images and especially svgs are attack vectors for xss)
  • proxy {user}.flounder.online to flounder.online/user/{user} with default path being index.gmi
  • proxy {user}.flounder.online/static/style.css to flounder.online/static/style.css
  • limit body to 32KB

Flounder requires two servers -- an https server and a gemini server. For my deployment, I use nginx and molly-brown. Much of the routing and settings occurs at this level. I will add this to the documentation once it is more stable.

The admin user is a special user that allows you to make site-wide announcements, etc.