chore: added /privacy and now what detail
1817d1da
5 file(s) · +129 −0
| 50 | 50 | func (a *App) routes() *http.ServeMux { |
|
| 51 | 51 | mux := http.NewServeMux() |
|
| 52 | 52 | mux.HandleFunc("GET /", a.indexHandler) |
|
| 53 | + | mux.HandleFunc("GET /privacy", a.privacyHandler) |
|
| 53 | 54 | mux.HandleFunc("GET /og.png", a.ogImageHandler) |
|
| 54 | 55 | mux.HandleFunc("GET /api/resolve", a.resolveHandler) |
|
| 55 | 56 | mux.HandleFunc("GET /static/", embeddedHandler(appFS, "static")) |
| 12 | 12 | ||
| 13 | 13 | const maxFeedURLs = 20 |
|
| 14 | 14 | ||
| 15 | + | func (a *App) privacyHandler(w http.ResponseWriter, r *http.Request) { |
|
| 16 | + | render(a.Templates, w, "privacy.html", nil, a.Log) |
|
| 17 | + | } |
|
| 18 | + | ||
| 15 | 19 | func (a *App) indexHandler(w http.ResponseWriter, r *http.Request) { |
|
| 16 | 20 | data := indexPageData{ |
|
| 17 | 21 | BaseURL: a.BaseURL, |
| 390 | 390 | padding: 2rem 0; |
|
| 391 | 391 | } |
|
| 392 | 392 | ||
| 393 | + | /* ── Now what? (details dropdown) ────────────────────────────────── */ |
|
| 394 | + | ||
| 395 | + | .now-what { |
|
| 396 | + | width: 100%; |
|
| 397 | + | margin-top: -0.5rem; |
|
| 398 | + | } |
|
| 399 | + | ||
| 400 | + | .now-what summary { |
|
| 401 | + | font-size: 12px; |
|
| 402 | + | opacity: 0.6; |
|
| 403 | + | cursor: pointer; |
|
| 404 | + | width: fit-content; |
|
| 405 | + | list-style: none; |
|
| 406 | + | text-decoration: underline; |
|
| 407 | + | text-underline-offset: 2px; |
|
| 408 | + | } |
|
| 409 | + | ||
| 410 | + | .now-what summary::-webkit-details-marker { |
|
| 411 | + | display: none; |
|
| 412 | + | } |
|
| 413 | + | ||
| 414 | + | .now-what summary:hover { |
|
| 415 | + | opacity: 1; |
|
| 416 | + | } |
|
| 417 | + | ||
| 418 | + | .now-what[open] summary { |
|
| 419 | + | opacity: 1; |
|
| 420 | + | } |
|
| 421 | + | ||
| 422 | + | .now-what-body { |
|
| 423 | + | margin-top: 0.75rem; |
|
| 424 | + | padding: 0.75rem 1rem; |
|
| 425 | + | border: 1px solid #ddd; |
|
| 426 | + | font-size: 13px; |
|
| 427 | + | line-height: 1.5; |
|
| 428 | + | display: flex; |
|
| 429 | + | flex-direction: column; |
|
| 430 | + | gap: 0.5rem; |
|
| 431 | + | } |
|
| 432 | + | ||
| 433 | + | .now-what-body ul { |
|
| 434 | + | display: flex; |
|
| 435 | + | flex-direction: column; |
|
| 436 | + | gap: 0.5rem; |
|
| 437 | + | padding-left: 1.1rem; |
|
| 438 | + | } |
|
| 439 | + | ||
| 440 | + | .now-what-body a { |
|
| 441 | + | text-decoration: underline; |
|
| 442 | + | text-underline-offset: 2px; |
|
| 443 | + | } |
|
| 444 | + | ||
| 445 | + | /* ── Footer ──────────────────────────────────────────────────────── */ |
|
| 446 | + | ||
| 447 | + | .footer { |
|
| 448 | + | display: flex; |
|
| 449 | + | gap: 1rem; |
|
| 450 | + | width: 100%; |
|
| 451 | + | margin-top: auto; |
|
| 452 | + | padding-top: 1rem; |
|
| 453 | + | border-top: 1px solid #ddd; |
|
| 454 | + | font-size: 12px; |
|
| 455 | + | opacity: 0.6; |
|
| 456 | + | } |
|
| 457 | + | ||
| 458 | + | .footer a:hover { |
|
| 459 | + | opacity: 1; |
|
| 460 | + | } |
|
| 461 | + | ||
| 393 | 462 | @media (max-width: 480px) { |
|
| 394 | 463 | .feed-meta { |
|
| 395 | 464 | flex-direction: column; |
| 34 | 34 | {{range .FeedURLs}}{{.Name}}<br>{{end}} |
|
| 35 | 35 | </div> |
|
| 36 | 36 | ||
| 37 | + | <details class="now-what"> |
|
| 38 | + | <summary>now what?</summary> |
|
| 39 | + | <div class="now-what-body"> |
|
| 40 | + | <p>Now that you've seen RSS in action, there's a few things you can do:</p> |
|
| 41 | + | <ul> |
|
| 42 | + | <li>Share this feed with someone else so they can also learn about RSS.</li> |
|
| 43 | + | <li>Keep using this free app by bookmarking the URLs for specific feed collections.</li> |
|
| 44 | + | <li>Download a dedicated RSS reader. These will have much more features and let you sync across devices. A few include <a href="https://netnewswire.com" target="_blank" rel="noopener noreferrer">NetNewsWire</a>, <a href="https://www.currentreader.app" target="_blank" rel="noopener noreferrer">Current</a>, or <a href="https://play.google.com/store/apps/details?id=com.prof18.feedflow" target="_blank" rel="noopener noreferrer">FeedFlow</a>.</li> |
|
| 45 | + | <li>Create your own RSS feed that you can share with others. Quick and no nonsense way to do this is to use an app like <a href="https://www.sourcefeed.app" target="_blank" rel="noopener noreferrer">sourcefeed</a>. The old fashion way is to start a blog with something like <a href="https://pagecord.com" target="_blank" rel="noopener noreferrer">Pagecord</a> or <a href="https://bearblog.dev" target="_blank" rel="noopener noreferrer">BearBlog</a>.</li> |
|
| 46 | + | </ul> |
|
| 47 | + | <p>The web doesn't have to be a walled garden; we can make it open again.</p> |
|
| 48 | + | </div> |
|
| 49 | + | </details> |
|
| 50 | + | ||
| 37 | 51 | {{if .Error}} |
|
| 38 | 52 | <div id="error" class="error"><p>{{.Error}}</p></div> |
|
| 39 | 53 | {{else}} |
|
| 67 | 81 | </div> |
|
| 68 | 82 | <script src="/static/app.js"></script> |
|
| 69 | 83 | {{end}} |
|
| 84 | + | ||
| 85 | + | <footer class="footer"> |
|
| 86 | + | <a href="https://github.com/stevedylandev/feeds" target="_blank" rel="noopener noreferrer">source</a> |
|
| 87 | + | <a href="/privacy">privacy</a> |
|
| 88 | + | <a href="https://stevedylan.dev" target="_blank" rel="noopener noreferrer">by steve</a> |
|
| 89 | + | </footer> |
|
| 70 | 90 | </body> |
|
| 71 | 91 | </html> |
|
| 1 | + | <!doctype html> |
|
| 2 | + | <html lang="en"> |
|
| 3 | + | <head> |
|
| 4 | + | <meta charset="UTF-8" /> |
|
| 5 | + | <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
|
| 6 | + | <meta name="theme-color" content="#ffffff" /> |
|
| 7 | + | <link rel="stylesheet" href="/static/styles.css" /> |
|
| 8 | + | <title>Privacy — Feeds</title> |
|
| 9 | + | <meta name="description" content="Privacy policy for Feeds" /> |
|
| 10 | + | <link rel="icon" type="image/x-icon" href="/static/favicon.ico" /> |
|
| 11 | + | <link rel="icon" type="image/png" sizes="16x16" href="/static/favicon-16x16.png" /> |
|
| 12 | + | <link rel="icon" type="image/png" sizes="32x32" href="/static/favicon-32x32.png" /> |
|
| 13 | + | <link rel="apple-touch-icon" href="/static/apple-touch-icon.png" /> |
|
| 14 | + | <link rel="manifest" href="/static/site.webmanifest" /> |
|
| 15 | + | </head> |
|
| 16 | + | <body> |
|
| 17 | + | <div class="header"> |
|
| 18 | + | <a href="/" class="logo"><h1>FEEDS</h1></a> |
|
| 19 | + | </div> |
|
| 20 | + | ||
| 21 | + | ||
| 22 | + | <div class="about"> |
|
| 23 | + | <h2>Privacy</h2> |
|
| 24 | + | <p>This app does not use any cookies, trackers, analytics, or observation. It's server side rendered on Railway that only records VPS system load (CPU, Memory, Number of Requests, Ingres/egres). Feeds is free and MIT open sourced software.</p> |
|
| 25 | + | </div> |
|
| 26 | + | ||
| 27 | + | <a href="/" class="btn">← back</a> |
|
| 28 | + | ||
| 29 | + | <footer class="footer"> |
|
| 30 | + | <a href="https://github.com/stevedylandev/feeds" target="_blank" rel="noopener noreferrer">source</a> |
|
| 31 | + | <a href="/privacy">privacy</a> |
|
| 32 | + | <a href="https://stevedylan.dev" target="_blank" rel="noopener noreferrer">by steve</a> |
|
| 33 | + | </footer> |
|
| 34 | + | </body> |
|
| 35 | + | </html> |