Go Newsletter - unders/mywiki GitHub Wiki

New

GET  "/subscription;subscribe-to-newsletter"
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"

newsstand 
  -> |main   |
     |handler|  -> |app| -> | issue        |
                            | subscription |
~/p/src/newsstand
.mise
  tasks
cmd
  newsstand
    main.go
    internal/
    app/
       app_config.go
    issue/
      issue_get_archive.go
    subscription/
      testdata/
      subscription_config.go
      subscription_options.go
      subscription.go
      subscription_get_subscribe_to_newsletter.go
      subscription_post_subscribe.go
      subscription_get_waiting_for_email_confirmation.go
      subscription_post_confirm.go
      subscription_get_welcome.go
      subscription_post_unsubscribe.go
      subscription_welcome_back.go
    editorissue/
    donations/
    feeds/
    html/
      page/
        component/
          button.html
          button.js
          button.css
        layout/
          head.html
          header.html
        page/
          error.internal.html
          error.notfound.html
          index.html
          editor.issue.show.html
          issue.show.html
          issue.archive.html
          subscription.subscribe.to.newsletter.html
          subscription.confirm.html
          subscription.confirmed.html

        static/
          bundle.sha3.js
          bundle.sha3.css
          page/
             component
               button.js
               button.css
          image
          font

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