Exactly. One of the example is exactly that; an agent that can log into servers, investigate and resolve issues, deploy apps, etc.
If you end up playing with it, let me know what you think.
HN user
Founded a digital consultancy focused on China and APAC (https://wiredcrat.com). Sold it to Publicis in 2022.
Went back to programming, building open source tools: Pages CMS (https://pagescms.org), Basecoat (https://basecoatui.com), /dev/push (https://devpu.sh).
---
GitHub: https://github.com/hunvreus
X: https://x.com/hunvreus
Website: https://ronanberder.com
Exactly. One of the example is exactly that; an agent that can log into servers, investigate and resolve issues, deploy apps, etc.
If you end up playing with it, let me know what you think.
Have you looked at https://github.com/git-bug/git-bug ?
I remember reading The Twelve-Factor App [1] from the Heroku folks back in the day, and was blown away by how well they understood the problem. Not only that but they had great taste.
I moved things to Render a while back, and then to my own Hetzner server (I built kind of an open source Vercel clone for that reason [2]).
I'm not quite sure any of these platforms are going to be relevant 5 years from now when you can summon your own DevOps AI agent. At the very least it's going to be incredibly difficult to justify the premium on top of AWS.
Awesome. There was a company in China, eDuShi (E都市), doing this for a whole bunch of Chinese cities back in the day: https://www.flickr.com/photos/seeminglee/4112874847
Absolute self-promotion: https://github.com/hunvreus/reallysimpledocs
Mintlify does look pretty, but between that and all the React exploits, I'll stick with good ol' static sites.
Kinda why I built ReallySimpleDocs [1]. Add Pages CMS [2] to it and you're set.
Appreciated. That's pretty much what I was going for.
The only thing I think is missing is a proper full text search which I'll add later on this week using lunr.js [1]. I just didn't have the time to get it done for this release.
It's pretty much as advertised: a really simple documentation template built with 11ty [1] and Tailwind.
I've been releasing a few projects in the past year: Basecoat [2], Pages CMS [3], and lately /dev/push [4]. Each one of them needed its own documentation.
Sure, I could have used stuff like Mintlify or Docusaurus. But I really wanted something fast, modern, simple, and good-looking. And if possible: no React.
Since it's using Basecoat, you get a shadcn/ui compatible design system, so pretty easy to style.
I'll be rolling it out to all my projects, but maybe some of you find it useful.
[1] https://11ty.dev
[4] https://devpu.sh
Fair enough. I actually needed dns-01 for /dev/push [1] so ended up not using it. I still thought it was a pretty cool project.
Didn't recognize you without the horse picture.
Quart was interesting, but it didn't seem to have as much traction as FastAPI. I also seem to understand Flask is trying to integrate some of Quart's ideas.
I love that, I may steal it.
Some interesting concepts:
- Components: https://hyperflask.dev/guides/components/ - Bundling view and controller in the same file: https://hyperflask.dev/guides/interactive-apps/
I think these may be footguns though. Components for example are just a regular macros under the hood. Why not use macros then?
I'm also curious about the choice of Flask. I started with a similar approach for /dev/push [1], but ended up moving to FastAPI + Jinja2 + Alpine.js + HTMX once I figured out FastAPI wasn't just for APIs. I wanted proper async support. I love Flask, but don't you find it limiting?
Next stack I wanna try (right now I'm on FastAPI + Jinja2 + HTMX).
BTW, this comment is very true when dealing with HTMX as well:
But what I’m most excited about are the possibilities that Datastar enables. The community is routinely creating projects that push well beyond the limits experienced by developers using other tools.
For example when displaying the list of deployments, rather than trying to update any individual deployment as their state is updated, it's just simpler to just update the whole list. Your code is way simpler/lighter as you don't need to account for all the edge case (e.g. pager).
I'm still trying to figure out what the key difference would be when writing an app with Datastar over HTMX.
I wrote /dev/push [1] with FastAPI + HTMX + Alpine.js, and I'm doing a fair bit with SSE (e.g. displaying logs in real time, updating state of deployments across lists, etc). Looking at the Datastar examples, I don't see where things would be easier that this [2]:
<div
hx-ext="sse"
sse-connect="{{ url_for('project_event', team_id=team.id, project_id=project.id) }}"
sse-close="sse:stream_closed"
>
<div
hx-trigger="sse:deployment_creation, sse:deployment_status_update, sse:deployment_rollback, sse:deployment_promotion"
hx-get="{{ url_for('project_deployments', team_slug=team.slug, project_name=project.name).include_query_params(fragment='deployments') }}"
hx-target="#deployments"
></div>
</div>
Also curious what others think of web components. I tried to use them when I was writing Basecoat [3] and ended up reverting to regular HTML + CSS + JS. Too brittle, too many issues (e.g. global styling), too many gaps (e.g. state).[1] https://devpu.sh
[2] https://github.com/hunvreus/devpush/blob/main/app/templates/...
Still figuring it out. Routing the traffic is the annoying bit.
1. Is there a support for deploying into a multiple machines? If so, how does it work?
Working on that, you should soon be able to have a central /dev/push instance and remote nodes managed by it.
2. Where and how secrets are stored?
Environment variables are stored in the DB but encrypted using Fernet (https://github.com/hunvreus/devpush/blob/main/app/models.py).
Very cool. I focused on building a web ui, but wanted to add a CLI, I'll definitely take some inspiration from that project.
Oh yeah, I definitely took a lot of inspiration from it.
- internal network only with edge nodes (i.e tail scale out the box, + some edge nodes)
Can you help me understand that?
- option to deploy on multiple servers to scale with super simple non k8s approach.
I'm working on that, allowing you to manage remote nodes from a single /dev/push instance.
That's all good.
And this is definitely more targeted at programmers who just want to deploy their app and may have limited interest in DevOps/sysadmin/servers.
That'd be great, I'd definitely look at it.
The main difference is that you're just deploying apps, not containers (although I do plan on adding support for custom Docker images).
Ultimately, I built this because I wanted the Vercel experience for Python apps.
PS: it's built with FastAPI and HTMX (and Basecoat [1] which I created for this project).
/dev/push is really trying to recreate the UX of Vercel, so more user-friendly/prettier than CapRover..?
Additionally, for most cases you can select a runtime and deploy your app without any Docker config. Easier to get up and running if all you care about is deploy a Python/Go/Node.js app with simple requirements.
I do plan on offering the ability to use custom Docker images soon though.
Vercel does a ton of specialized work under the hood, not sure how much they could expose the underlying infra.
Sure, I just wanted a simple and user-friendly experience.
Sure. I just thought it'd be easier to explain what it does at first. That was mostly a personal project initially.
I get the appeal, but personally I stay away from k8s. I don't mind putting in work to set up my deployment pipeline, but on a day to day I just want to push code to my repo and potentially edit environment variables. That's the sweet spot I was trying to hit.
I have a draft ARCHITECTURE.md file in the repo: https://github.com/hunvreus/devpush/blob/main/ARCHITECTURE.m...
I'm also working on adding manual steps so that folks who prefer to deploy the app themselves can do so.
I initially had the app deployed with Terraform + Ansible, but rewrote it as a bash script as I thought it'd be lower friction.