[very crude, wip] post to bsky without the distraction of feeds
Go 72.3%
HTML 13.9%
CSS 8.5%
JavaScript 5.2%
Makefile 0.2%
6 1 0

Clone this repository

https://tangled.org/cookie.ebil.club/zensky
git@tangled.org:cookie.ebil.club/zensky

For self-hosted knots, clone URLs may differ based on your setup.

README.md

zensky#

I came up with the idea of this web app because I wanted to be able to post something without getting sucked into the abyss of endless doomscrolling which I am very prone to doing.

zensky only lets you write posts and hit send. You can read posts that you have just sent out on zensky. That's it. You can't read any other posts.

The whole thing was vibe coded using Shelley, the built-in AI chatbot in an exe.dev VM. I plan to use this to understand Go project structure. I haven't audited shit -- not even the build and run instructions below this section -- so just be aware of that. Afaik Shelly did pretty good though and it both amazes and scares the shit out of me that AI agents are capable of this.

You can try it out on: https://cooki.exe.xyz (due to some quirks of exe.dev VMs, it only works if you use https and not http in the url)

If you see "Service unavailable" that means I -- intentionally or unintentionally -- shut down the process. Feel free to dm me on bluesky to request to turn it back on. Response not guaranteed (but most of the time i will, unless im rly busy or taking a break from the internet, just thought it'd be safer to say that)

Building and Running#

Build with make build, then run ./srv. The server listens on port 8000 by default.

Running as a systemd service#

To run the server as a systemd service:

# Install the service file
sudo cp srv.service /etc/systemd/system/srv.service

# Reload systemd and enable the service
sudo systemctl daemon-reload
sudo systemctl enable srv.service

# Start the service
sudo systemctl start srv

# Check status
systemctl status srv

# View logs
journalctl -u srv -f

To restart after code changes:

make build
sudo systemctl restart srv

Authorization#

exe.dev provides authorization headers and login/logout links that this template uses.

When proxied through exed, requests will include X-ExeDev-UserID and X-ExeDev-Email if the user is authenticated via exe.dev.

Database#

This template uses sqlite (db.sqlite3). SQL queries are managed with sqlc.

Code layout#

  • cmd/srv: main package (binary entrypoint)
  • srv: HTTP server logic (handlers)
  • srv/templates: Go HTML templates
  • db: SQLite open + migrations (001-base.sql)