openvibers/openvibe.work STATUS.json
STATUS.json
| 1 | { |
| 2 | "repository": "OpenVibers/OpenVibe.Work", |
| 3 | "stage": "beta", |
| 4 | "code": true, |
| 5 | "wave": "W20", |
| 6 | "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.", |
| 7 | "runtime": "node 22, express 4, PostgreSQL 18 (openvibe-sdk/db, async) + Valkey 9", |
| 8 | "port": "4960", |
| 9 | "domain": "openvibe.work", |
| 10 | "contracts": "openvibe-contracts v0.419.0", |
| 11 | "sdk": "openvibe-sdk v0.161.0", |
| 12 | "shared": "openvibe-shared v4.235.0", |
| 13 | "packages": [ |
| 14 | "openvibe-contracts v0.419.0", |
| 15 | "openvibe-sdk v0.161.0", |
| 16 | "openvibe-shared v4.235.0", |
| 17 | "openvibe-publishing v1.7.0" |
| 18 | ], |
| 19 | "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.", |
| 20 | "works": [ |
| 21 | "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", |
| 22 | "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", |
| 23 | "Search: /jobs?q=&remote=&type=&location= newest first, 30 a page with a cursor, facets for remote and job type", |
| 24 | "One listing: /jobs/:id with the board's fields, the excerpt, a 'Read the full listing on <source>' link and a JobPosting JSON-LD whose url is the original", |
| 25 | "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", |
| 26 | "The API (/api/v1): jobs, one job, sources with their terms and last fetch, and saved searches", |
| 27 | "The pages: home, /jobs, /jobs/:id, /saved, /sources, /docs and /updates — server-rendered, complete without JavaScript", |
| 28 | "Discovery: a sitemap carrying the newest listings, llms.txt, robots.txt (saved searches excluded) and JSON-LD", |
| 29 | "Per-caller limits on the search and on saved-search writes; problem+json errors with stable codes", |
| 30 | "Tests: the ingest, the search, the pages and the saved searches against stand-in boards, on a temp PGlite database with a mock Network", |
| 31 | "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)" |
| 32 | ], |
| 33 | "notYet": [ |
| 34 | "The agent pillar: drafting, tailoring and tracking an application with the person's approval at each step", |
| 35 | "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", |
| 36 | "Its service and capability manifests in openvibe-contracts (contracts-service is work): the API is live, but no <work>.jobs.* capability is registered yet, so app and agent tokens cannot call it", |
| 37 | "A deployment: the service is not registered with OpenVibe.Services nor deployed by OpenVibe.Host" |
| 38 | ], |
| 39 | "capabilitiesRegistered": false, |
| 40 | "serviceManifestRegistered": true, |
| 41 | "deployed": true, |
| 42 | "placeholderInSites": false, |
| 43 | "features": [ |
| 44 | "Network sign-in", |
| 45 | "job listings with provenance", |
| 46 | "search and facets", |
| 47 | "saved searches", |
| 48 | "sources and their terms", |
| 49 | "api", |
| 50 | "server-rendered pages", |
| 51 | "discovery files", |
| 52 | "limits and readiness", |
| 53 | "background ingest", |
| 54 | "deploy files" |
| 55 | ], |
| 56 | "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.", |
| 57 | "updated": "2026-11-13" |
| 58 | } |
| 59 |