Web forum using Racket/SQLite.

Pelle Hjek 38537d0e0c fix db init 5 months ago
htdocs af1cb48e92 Remove dependency on external markdown package 5 months ago
.gitignore 540951291f Work in progress! 7 months ago
COPYING 540951291f Work in progress! 7 months ago
IDEAS.md 91a62d70f6 Feature checklist 6 months ago
README.md af1cb48e92 Remove dependency on external markdown package 5 months ago
bazar.rkt 97c7ac9e3a Unvote 6 months ago
login.rkt af1cb48e92 Remove dependency on external markdown package 5 months ago
markdown.rkt 97c7ac9e3a Unvote 6 months ago
model.rkt 38537d0e0c fix db init 5 months ago
page.rkt af1cb48e92 Remove dependency on external markdown package 5 months ago
post.rkt af1cb48e92 Remove dependency on external markdown package 5 months ago
search.rkt af1cb48e92 Remove dependency on external markdown package 5 months ago
serve.rkt af1cb48e92 Remove dependency on external markdown package 5 months ago
undebatable.rkt eaa6bd538d Remove shell scripts 6 months ago
upload.rkt af1cb48e92 Remove dependency on external markdown package 5 months ago
user.rkt af1cb48e92 Remove dependency on external markdown package 5 months ago
vote.rkt af1cb48e92 Remove dependency on external markdown package 5 months ago

README.md

Undebatable

A HN-like written in Racket.

Not yet stable! But feel free to try it out.

How to run

  • install Racket version >= 7.0
  • in the undebatable folder run ./undebatable.rkt

Feature development

Need

  • site admin
  • change password
  • friendly error messages
  • correct redirection after action
  • collapsible comments
  • post deletion
  • search
  • threads participated in
  • notification on reply
  • limit login tries
  • unvoting
  • password recovery
  • file upload
  • download user data in machine readable format (GDPR)
  • "forget me" / profile deletion (GDPR)
  • pagination
  • graceful degredation (js not required)
  • sockpuppet detection
  • spam filter
  • bazar / shop, but without paypal
  • event planner (doodle-like)
  • title length limit

Want

  • dupe detection
  • zero-config install
  • easy backup (all state in one file)
  • a general way of listing items. (DRY)
  • proper ranking algorithm
  • tags
  • provide rss feeds
  • user profiles
  • upload expiriy
  • anonymous file upload (with shorter expiry times, perhaps)
  • multimedia gallery
  • closed threads (via password or via user list? probably user list)

Like

  • advanced search
  • optional filter bubble view, e.g. things similar to what you have upvoted before (or dissimilar to downvoted items)
  • avoid PLOP
  • numbered pagination
  • user styles
  • feed reader
  • geographical blogging

Security

  • use prepared SQL statements to prevent injection
  • escape user input before displayed
  • use POST requests for state change (is login relevant here?)
  • require auth tokens in every POST request to prevent CSRF

Code style

  • use SQL as much as possible (be declarative)
  • use currying when applying general functions for more specific purposes
  • use keyword arguments when there are too many of them
  • use pattern matching as much as possible