Go Newsletter - unders/mywiki GitHub Wiki

Monorepo

  • Obelix

Tools

~/p/src
    obelix
        .mise/tasks/:task_name
                    :desktop--install --os fedora --k8s kind --release demo-1.0
                    :server--install  --os fedora --systemd  --release demo-1.0

    release
        demo-1.0
            demo-1.0__os_fedora.toml
            demo-1.0__k8s_kind.toml
            demo-1.0__systemd.toml
            demo-1.0__release.toml

Frontend

gRPC

Mono Repo

cmd
    go
        internal
            resend/
                resend_mailer.go
        newsstand
            main.go
            mise.toml
            newsstand_main.go
            app/
                newsstand_app_config.go
                newsstand_app_mailer.go
            issue/
            subscription/
                newsstand_subscription_config.go
                newsstand_subscription_options.go
                newsstand_subscription_handler.go
                newsstand_subscription_handler_create.go
            editorissue/
            donations/
            feeds/
            internal
                newstand
            grpc
                buf.yaml
                proto
                gen
                    go
                    ts
            www
                src
                   routes/
                   app.css
                   app.html
                   lib/
                deno.json
                svelte.config.js
                vite.config.ts

Design

Personas

  • Subscriber
  • Reader
  • Feed reader
  • Feed subscriber
  • Donator
  • Author

Use Cases (Diagram)

  • Newsletter
  • Subscribe
  • Unsubscribe
  • Donate
  • Browse Issue Archive
  • Read issue
  • Manage Issue
  • Browse Issue List
  • Browse Subscriber List
  • Set subscriber as unsubscribed

Page Titles

  • Welcome to the Go Newsletter
  • Issue Archive
  • Issue Archive 2024
  • Issue 2024.1: The Go Wizard

Routes

GET  "/"
GET  "/issue;archive?limit=3"
GET  "/issue;archive?year=2024&limit=30&next=ff8f8f8f8ff8eee1134"
GET  "/issue;archive?limit=3&next=ff8f8f8f8ff8eee1134&prev=ff8f8f8f8ff8eee1134"
GET  "/issue;latest"                                  # REDIRECT_TO  =>  GET "/issue/2024.1"
GET  "/issue/{id}"                                    # "/issue/2024.1"

GET  "/subscription;new"
POST "/subscription;subscribe"                        # REDIRECT_TO  =>  GET "/subscription;waiting-for-email-confirmation"
GET  "/subscription;waiting-for-email-confirmation"
POST "/subscription;confirm/{id}"                     # REDIRECT_TO  =>  GET "/subscription;welcome"
GET  "/subscription;welcome"
POST "/subscription;unsubscribe/{id}"                 # REDIRECT_TO  =>  GET "/subscription;welcome-back"
GET  "/subscription;welcome-back"

POST "/api/webhooks;resend"

GET  "/donation;new"
POST "/donation"                                      # REDIRECT_TO  =>  GET "/donation;thank-you"
GET  "/donation;thank-you"

GET  "/editor/issue;list?status=draft&limit=20"
GET  "/editor/issue;new"
POST "/editor/issue;create"                           # REDIRECT_TO  =>  GET  "/editor/issue/{id}"
GET  "/editor/issue/{id}"
GET  "/editor/issue;edit/{id}"
POST "/editor/issue;update/{id}"                      # REDIRECT_TO  =>  GET  "/editor/issue/{id}"  
POST "/editor/issue;publish/{id}"                     # REDIRECT_TO  =>  GET  "/editor/issue/{id}" 
POST "/editor/issue;unpublish/{id}"                   # REDIRECT_TO  =>  GET  "/editor/issue/{id}"

GET   "/editor/subscriber;list?status=subscriber&limit=3&next=ff8f8f8f8ff8eee1134&prev=ff8f8f8f8ff8eee1134"
GET   "/editor/subscriber;list?status=unsubscribed&limit=3&next=ff8f8f8f8ff8eee1134&prev=ff8f8f8f8ff8eee1134"
POST  "/editor/subscriber;unsubscribe/{email}"        # REDIRECTO_TO  =>    "/editor/subscriber;list?status=unsubscribed&order_by=ASC"

GET "/feeds"
GET "/feeds;rss.xml"
GET "/feeds;atom.xml"

CODE

cmd
    newsletter
       newsletter_main.go
       app/
           newsletter_app_config.go
           newsletter_app_mailer.go
       browser/
       issue/
       subscription/
           newsletter_subscription_config.go
           newsletter_subscription_options.go
           newsletter_subscription_handler.go
           newsletter_subscription_handler_create.go
       editorissue/
       tips/
       feeds/
       internal/
           eventlog/
               newsletter_eventlog_handler.go
           resend/
               newsletter_resend_mailer.go
internal/
    resend/
        resend_mailer.go

Tools

Go