{ "repository": "OpenVibers/OpenVibe.Work", "stage": "beta", "code": true, "wave": "W20", "plan": "Job listings gathered from open boards with their provenance, search, saved searches with alerts through OpenVibe.Watch, and the agent pillar: tracked applications and help preparing one from the person's OpenVibe.Actor agent. Next: an approval at each step of the agent's help, and more boards.", "runtime": "node 22, express 4, PostgreSQL 18 (openvibe-sdk/db, async) + Valkey 9", "port": "4960", "domain": "openvibe.work", "contracts": "openvibe-contracts v0.419.0", "sdk": "openvibe-sdk v0.161.0", "shared": "openvibe-shared v4.238.0", "packages": [ "openvibe-contracts v0.419.0", "openvibe-sdk v0.161.0", "openvibe-shared v4.238.0", "openvibe-publishing v1.7.0" ], "summary": "OpenVibe.Work gathers job listings from five public job boards (Arbeitnow, We Work Remotely, RemoteOK, Hacker News and Remotive) under their terms — four arrive through OpenVibe.Sources, and Remotive is read directly because its robots.txt keeps Sources out — the source is named and the original listing is linked on every page, and only a short excerpt is kept. It searches them with facets, shows one listing with a schema.org JobPosting whose url is the original, and lets a signed-in person keep a search, see what is new since they last looked, get alerts through OpenVibe.Watch, track the jobs they apply to with a status history, and ask their OpenVibe.Actor agent to help prepare an application. Public reads need no token.", "works": [ "The ingest: Remotive read directly and Arbeitnow, We Work Remotely, RemoteOK and Hacker News followed from OpenVibe.Sources (WORK_INGEST=on, off in tests and development), with upsert by (source, source_id) and expiry after 30 days unseen", "The listings: provenance kept and shown (source name, link to the original, when it was fetched), a short plain-text excerpt, never the full description", "Search: /jobs?q=&remote=&type=&location= newest first, 30 a page with a cursor, facets for remote and job type", "One listing: /jobs/:id with the board's fields, the excerpt, a 'Read the full listing on ' link and a JobPosting JSON-LD whose url is the original", "Saved searches for a signed-in person, each with the count of listings new since they last looked; /saved is where that count is cleared", "The API (/api/v1): jobs, one job, sources with their terms and last fetch, and saved searches", "The pages: home, /jobs, /jobs/:id, /saved, /sources, /docs and /updates — server-rendered, complete without JavaScript", "Discovery: a sitemap carrying the newest listings, llms.txt, robots.txt (saved searches excluded) and JSON-LD", "Per-caller limits on the search and on saved-search writes; problem+json errors with stable codes", "Tests: the ingest, the search, the pages and the saved searches against stand-in boards, on a temp PGlite database with a mock Network", "Account export and deletion (ADR-033): the searches a person saved are exported to OpenVibe.Network on network.account.export_requested and deleted whole on network.account.deleted, with the counts confirmed back; the two Events topics are subscribed at boot (server/identity/account-data.js)" ], "notYet": [ "The agent pillar: drafting, tailoring and tracking an application with the person's approval at each step", "Alerts: being told when a listing that fits appears — that comes through OpenVibe.Watch with the agent pillar; today a saved search is a repeatable search plus a count of what is new", "Its service and capability manifests in openvibe-contracts (contracts-service is work): the API is live, but no .jobs.* capability is registered yet, so app and agent tokens cannot call it", "A deployment: the service is not registered with OpenVibe.Services nor deployed by OpenVibe.Host" ], "capabilitiesRegistered": false, "serviceManifestRegistered": true, "deployed": true, "placeholderInSites": false, "features": [ "Network sign-in", "job listings with provenance", "search and facets", "saved searches", "sources and their terms", "api", "server-rendered pages", "discovery files", "limits and readiness", "background ingest", "deploy files" ], "deployment": "openvibe-ovh: unit openvibe-work.service on 127.0.0.1:4960 (git checkout /opt/openvibe.work, env /etc/openvibe/work.env, database ov_work), deployed with `sudo ovhost deploy work`; public at https://openvibe.work since 2026-10-08.", "updated": "2026-11-13" }