The "job as library" pattern is simple: instead of wiring jobs into main or a framework, you split into 3 things.
Your queue is a struct with New(db) — it knows submit, poll, complete, fail, nothing else.
Your worker is another struct that loops on the queue and dispatches to handlers registered via RegisterHandler("type", fn). Your handlers are pure functions (ctx,payload) → (result, error) carried by a dependency struct.
Main just assembles: open DB, create queue, create worker, register handlers, call worker.Start(ctx). Result: each handler is unit-testable without the worker or network, the worker is reusable across any pipeline, and lifecycle is controlled by a simple context.Cancel().
Bonus: here the queue is a SQLite table with atomic poll (BEGIN IMMEDIATE), zero external infra.
The whole "framework" is 500 lines of readable Go, not an opaque DSL. TL;DR: every service is a library with New() + Start(ctx), the binary is just an assembler.
The "all in connectivity" pattern means every capability in your system — embeddings, document extraction, replication, MCP tools — is called through one interface: router.Call(ctx,"service", payload).
The router looks up a SQLite routes table to decide how to fulfill that call: in-memory function (local), HTTP POST (http), QUIC stream (quic), MCP tool (mcp), vector embedding (embed), DB replication (dbsync), or silent no-op (noop).
You code everything as local function calls — monolith. When you need to split a service out, you UPDATE one row in the routes table, the watcher picks it up via PRAGMA data_version, and the next call goes remote.
Zero code change, zero restart. Built-in circuit breaker, retry with backoff, fallback-to-local on remote failure, SSRF guard.
The caller never knows where the work happens.
That's the "job as library" pattern: the boundary between monolith and microservices is a config row, not an architecture decision.
Not sure what you mean by "the modern web", but if it's the ads and popups, I can only recommend NextDNS. It blocks spam, offensive content etc. on dns level. Obviously you have to trust them, but it makes the web usable again to me and my family.
Condolences for your loss. It sounds like a difficult period - give yourself time to mourn. Try to fill the time with meaningful experiences - if you like dogs, go to a dog shelter, if you like hiking, go hiking. A lot of sun, sport and good company helps too. Avoid thinking about the future, work or money right now.
People already mentioned this, but take a base salary at least.
Consider posting your product, maybe someone would have an idea of what to do with it or a company might need exactly certain features, even if your product does not have traction at the moment.
I submitted the article to HN after reading it and I have joined the Exercism Insiders - recurring $10/month, a very fair deal. Hope that has helped a bit!
As someone already mentioned please consider adding ways for monetizing, ads + remove ads, paywall, paid exercises, etc. to stay afloat.
Also please get in touch, email in bio, I don‘t have anything concrete in mind but would like to be in touch. In another life I would gladly be teaching coding, who knows maybe it works out.