SE Insights Engine.
AI-powered content engine that generates daily LinkedIn posts and blog drafts using my voice profile, trending tech news, and Claude API.
What it is today
The SE Insights Engine is the first tab I open every morning. It's a self-hosted content intelligence platform, running on my home k3s cluster, that ingests RSS feeds across the things I care about, helps me draft articles and social posts with AI assistance trained on my own voice, captures voice journals, publishes to LinkedIn, and tracks how that content performs once it's out in the world.
It's also become something quieter and more personal: an engine for self-direction. A place that nudges me toward writing, reflecting, and sharing instead of just consuming.
It wasn't supposed to be all of that.
How it started
The first version was a small utility I called grafana-notifier. The job was simple: aggregate news, releases, and community chatter about Grafana (the company I work for and the ecosystem I sell into) and surface anything worth sharing on LinkedIn. I lead a team of solutions engineers. Staying current is part of the role. Staying visibly current is also part of the job: being the person on my team's feed who's already read the announcement, already has a take, already knows how it lands with customers. I built grafana-notifier to make that easier and more deliberate.
It worked. But it was narrow. Every day the feed showed me Grafana news, and only Grafana news. That was useful, but it didn't reflect the full shape of what I actually pay attention to.
The pivot
I started adding feeds. AI announcements. Observability writing from people I admire. Engineering leadership. Running and training. Parenting essays. The things I care about don't sort cleanly into one bucket, and the more I added, the clearer it became that the project wasn't really about Grafana news. It was about being more intentional with the inputs that shape my thinking.
Around the same time, I started using the platform less as an output channel and more as an idea instigator. I'd see a piece of news, get a half-thought, and want a place to capture it. So the platform grew a voice journaling feature: I talk into my phone, the audio gets transcribed, and the entry goes into a running "voice profile," a corpus of how I think and write that the AI uses to help draft posts and articles in something resembling my actual voice.
It wasn't a notifier anymore. It was a writing partner.
The original grafana-notifier was eventually retired. Everything it did is now folded into the larger platform, alongside the dozen other things the larger platform has become.
Where it is now
The platform is at version 4.4.1 as of this writing. The landing page is the voice journal, because the most useful thing I can do at 6 a.m. is dump the thoughts I woke up with before the day overwrites them. From there:
- News feed. Curated RSS across the categories I follow, with AI-generated blurbs that summarize each item in the time it takes to drink coffee. If something's worth a longer take, I can promote it into a draft article in one click.
- Drafts and articles. AI-assisted, but trained against my voice profile and my history of published pieces. The model doesn't write for me. It gives me a running start, and I edit from there. That distinction matters.
- LinkedIn integration. Posts publish directly through LinkedIn's API. The platform pulls analytics back in (impressions, engagement, reshares) so I can see what actually resonated instead of guessing.
- Voice journal. The landing page. The thing that captures half-formed ideas that turn into posts a week later.
- Daily prompts. A higher-quality model generates a journal question every morning. A lighter, faster model handles fun facts and tips throughout the day. Both exist to give me a reason to engage rather than scroll.
Underneath, it runs on a three-node k3s cluster in my home office, with PostgreSQL for storage, daily backups to a Synology NAS, and Grafana Cloud's Faro for frontend observability, because the engineer-adjacent part of me wants to know how the app performs in the same way I'd expect any production system to be observed. A Cloudflare tunnel selectively exposes parts of it through the gitclose.io domain. Everything is versioned, documented, and reproducible.
Why I built it this way
I could have stitched this together from off-the-shelf tools. Pocket, Readwise, Buffer, a journaling app, a notes app, a separate analytics dashboard, a writing assistant. Lashing those together was never the goal. The goal was to have one place that reflected one person (me), and that I could reshape as my interests shifted.
Running it on my own infrastructure matters too. I work in observability and DevOps every day. There's something honest about running my own stack, hitting my own bugs, debugging my own DNS, and feeling firsthand the things my customers feel. The home lab keeps me close to the work in a way a SaaS subscription never would. Most of the hardest-won lessons in this project (LinkedIn API quirks, async/sync pitfalls in FastAPI under load, the realities of running a private container registry across nodes) would have been invisible to me if I'd just paid someone else to handle them.
Where it's going
The next chapter is making capture frictionless. I'm wiring up an Android quick-capture widget so a thought from the grocery store line lands straight in my voice profile without opening an app. I want to keep tightening the loop between had a thought and wrote a post about it until the activation energy is essentially zero. The bottleneck on sharing more ideas has never been ideas. It's the friction between having one and getting it down.
Beyond that, I expect this project to keep evolving the way it always has: not from a roadmap, but from whatever I keep wishing it could do at 6 a.m.