Supporting technologies#
This site is built with Hugo.
The Blowfish theme is used.
This site’s code is stored on GitHub.
It is deployed on Cloudflare following this tutorial.
How is reading material managed?#
Most sources are managed via RSS with a self-hosted instance of Miniflux.
Articles are organized with Obsidian.
Pages are captured with Obsidian Web Clipper.
Publishing workflow#
flowchart TD
subgraph ORIGEN["📥 Sourcing articles"]
A1["📡 RSS Feeds"] -->|Mark articles as Starred| A2["📰 Miniflux
RSS Reader"]
A2 --> DS1[("⭐ Starred
Articles Data")]
A3["🌐 Web Browsing"] -->|Capture pages| A4["✂️ Obsidian
Web Clipper"]
A4 --> DS2[("📄 Captured
Webpages Data")]
end
DS1 --> E5["🐍 Sends Starred
to Obsidian"]
E5 --> B["💎 Obsidian
Desktop & mobile app"]
DS2 --> B
B -->|Organized and formatted
as Markdown| C["Selecting articles
to publish"]
subgraph AUTOMATIZACION["🛠️ Apps & Services - Automated processing"]
C --> D["🤖 GitHub Copilot
+ Skills"]
D -->|Calls and enhances
the processing| SCRIPTS["💻 Processing scripts
Python & PowerShell"]
SCRIPTS --> E1["🐍 Capture
OpenGraph"]
SCRIPTS --> E4["🐍 Resize images
per destination"]
SCRIPTS --> E3["🐍 Extract content
for social media"]
SCRIPTS --> E2["🐍 Daily empty
commits"]
SCRIPTS --> MD["Formatted Markdown
in folders"]
end
E1 --> DS3[("🖼️ Images")]
E4 --> DS4[("🖼️ Destination-specific
images")]
E3 --> DS5[("📝 Formatted content
for social media")]
MD --> REPO[("🗂️ Local
Git Repository")]
DS3 --> REPO
REPO -->|git push| GH["🐙 GitHub Repository
GitOps Hub"]
E2 -.triggers empty commit.-> GH
GH -->|Webhook Trigger| CF["☁️ Cloudflare Workers
Deployment engine"]
CF --> HUGO["⛰️ Hugo
Static site generator"]
HUGO --> THEME["🐡 Blowfish theme"]
THEME -->|Deploy to global CDN| SITE(["🌍 Published site"])
SITE -.Extraction.-> PUB
subgraph REDES["📣 Multi-platform distribution - built with Python"]
DS4 --> PUB["🐍 Automatic publishing
Posting extracted content & images"]
DS5 --> PUB
PUB --> K1(["🔷 LinkedIn"])
PUB --> K2(["⚫ Threads"])
PUB --> K3(["🦋 Bluesky"])
PUB --> K4(["🐘 Mastodon"])
end
subgraph LEYENDA["Legend"]
L1(["Manual action"])
L2["Automated process"]
L3["☁️ Web service"]
L4[("Storage")]
L5{{"External platform"}}
L6["🐍 Python application"]
end
click A1 "https://en.wikipedia.org/wiki/RSS" _blank
click A2 "https://miniflux.app/" _blank
click A4 "https://obsidian.md/clipper" _blank
click B "https://obsidian.md/" _blank
click D "https://github.com/features/copilot" _blank
click GH "https://github.com/juanbretti/" _blank
click CF "https://gohugo.io/host-and-deploy/host-on-cloudflare/" _blank
click HUGO "https://gohugo.io/" _blank
click THEME "https://blowfish.page/" _blank
click SITE "https://blog.juanbretti.com" _blank
click K1 "https://linkedin.com/in/juanbretti/" _blank
click K2 "https://www.threads.com/@juanbretti" _blank
click K3 "https://bsky.app/profile/juanbretti.bsky.social" _blank
click K4 "https://mastodon.social/@juanbretti" _blank
classDef pythonApp fill:#639922,color:#EAF3DE,stroke:#3B6D11
class E1,E2,E3,E4,E5,PUB,L6 pythonApp
style ORIGEN fill:#1e3a5f,color:#fff
style AUTOMATIZACION fill:#3a1e5f,color:#fff
style REDES fill:#5f3a1e,color:#fff
style SITE fill:#185fa5,color:#fff
style K1 fill:#185fa5,color:#fff
style K2 fill:#185fa5,color:#fff
style K3 fill:#185fa5,color:#fff
style K4 fill:#185fa5,color:#fff
style LEYENDA fill:#2c2c2c,color:#fff
