summaryrefslogtreecommitdiff
path: root/README.nfo
blob: dc495adc458f05e3497fb99f3af903fddab90ff7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
┌──────────────────────────────────────────────────────────────┐
│  M I C H E L A N G E L O                   [ KRZ ]   krz.sh  │
└──────────────────────────────────────────────────────────────┘

WHAT
  self-hosted tumblr media client, written in go. shows photos and
  videos from your dashboard in a masonry grid. no ads, no tracking,
  no npm.

DOES
  - css masonry grid, variable height, packed tight
  - infinite scroll via IntersectionObserver
  - per-blog grid view (/blog/<name>)
  - tag search (/search?q=<tag>)
  - like and reblog from the lightbox
  - dark/light via prefers-color-scheme
  - go stdlib only, no external runtime deps

SETUP
  1. create a tumblr app at https://www.tumblr.com/oauth/apps.
     callback url http://localhost:8080/auth/callback (or your domain).

  2. configure:

         export CONSUMER_KEY="your-consumer-key"
         export CONSUMER_SECRET="your-consumer-secret"
         export PORT=8080   # optional, defaults to 8080

  3. build and run:

         go build -o michelangelo .
         ./michelangelo

     open http://localhost:8080. you'll be sent to tumblr to authorize.

STRUCTURE
  main.go          http router, oauth flow, api proxy
  tumblr.go        tumblr api client (oauth 1.0a, no deps)
  templates/       layout.html, the html shell
  static/          app.css (grid, themes), app.js (scroll, lightbox)

NOTES
  - oauth tokens live in cookies. clear them or hit /logout to
    re-authenticate.
  - like/reblog use the tumblr v1 api; reblogging to your own blog
    needs your blog name detected on first auth.
  - tag search uses /tagged, one batch, no pagination.

┌──────────────────────────────────────────────────────────────┐
│  krz.sh                                                      │
└──────────────────────────────────────────────────────────────┘