rwest_io

This project contains the source code for my personal website, rwest.io.

My site consists of a few modules hosted by Nginx (* denotes authentication required):

org
static html pages
  • generated with Org-mode
  • / /blog /notes /projects
auth
auth server
  • OAuth2 service
  • supports discord, google, and github
  • /login /auth /logout
el
elsrv *
status
status server
  • /status

These are the frontend components. We also have a few backend components, most notably a Postgres DB service and a running Emacs session.

                                    ORG    = static html pages
                                    AUTH   = auth server  
                                    EL     = elsrv proxy         
                                    STATUS = status server 




+----------+                                            
|          |                                            
|          |                                            
|          |  +----------------+                        
|          |  |                |   +----------------+   
|          |  |    ORG         |   |                |   
|          |  |                |   |                |   
|          |  +----------------+   |       DB       |
|          |  |                |   |                |
|          |  |    AUTH        |   |                |
|  NGINX   |  |                |   +----------------+
|          |  +----------------+                      
|          |  |                |   +----------------+
|          |  |    EL          |   |                |
|          |  |                |   |                |
|          |  +----------------+   |     EMACS      |
|          |  |                |   |                |
|          |  |    STATUS      |   |                |
|          |  |                |   +----------------+
|          |  +----------------+          
|          |
|          |
|          |
+----------+

1. Modules

  • there are two types of modules worth mentioning here: static (org) and dynamic (auth el status).
    • Static modules do not interact with the backend and are just 'compiled' files which can then be served by any web server.
    • Dynamic modules are applications which send and receive information on specified sockets. They interact with backend components and need too be reverse proxied when used in a web server like Nginx.
      • binaries shipped with dynamic modules run as separate services.
      • configured at runtime
      • flexible routing - host each service across LAN/WAN

1.0.1. org

  • static org files
  • compiled to html and sent to web server via rwest-io.el

1.0.2. auth

  • authsrv
    • OAuth2 web service
      • Discord
      • Google

1.0.3. el

  • elprox
    • proxy HTTP requests to elsrv.el UDP socket
  • elsrv.el
    • Emacs remote control
      • evaluate elisp via raw UDP REPL

1.0.4. status

  • statsrv
    • server health report
    • current weather for client IP

2. tasks

2.1. TODO break out auth server

  • State "TODO" from [2022-08-28 Sun 18:33]
  • logic is contained in elprox, need to move this to authsrv

2.2. DONE sitemap generator

  • Note taken on [2022-08-28 Sun 18:32]
    see rwest-io-update-sitemap
  • State "DONE" from "TODO" [2022-08-28 Sun 18:32]
  • State "TODO" from [2022-08-27 Sat 21:13]
  • default generator isn't respecting our filedate macro
    • always uses the UPDATED file property
  • make separate autoload fn for generating sitemap, remove from org-publish-project-alist

3. resources