AI-driven predictive maintenance.
The repository now includes a minimal FastAPI backend and static frontend that support:
- health check
- telemetry ingest
- robot listing
- recommendation listing
- demo data seeding
- browser-based UI
Install dependencies:
python3 -m venv .venv
source .venv/bin/activate
pip install -e .Start the API:
uvicorn app.main:app --reloadSeed demo data:
uk seedOpen http://127.0.0.1:8000/ for the UI and http://127.0.0.1:8000/docs for the Swagger UI.
The backend ships a Typer CLI, installed as the
upkeep command with uk as a short alias. It covers local ops and inspection
tasks:
upkeep serve --reload # run the FastAPI app
upkeep seed # seed demo data
upkeep ingest --robot-id robot-01 --temperature-c 84 --vibration-mm-s 9
upkeep robots list # list known robots
upkeep recommendations list # list maintenance recommendations
uk seed # the same CLI through the short aliasShow the command list with upkeep, upkeep help, upkeep -h, or upkeep --help.
Run upkeep <command> --help for command details.
The commands only resolve on PATH after the virtual environment is activated:
source .venv/bin/activateTo make them available everywhere without activating the venv, link them onto
your PATH:
make link-cli # symlink upkeep and uk into /usr/local/bin
make unlink-cli # remove the symlinksOverride the target directory with BIN_DIR, for example
make link-cli BIN_DIR=$$HOME/.local/bin.
To run the CLI through Make instead, pass arguments with ARGS:
make cli # show the command list
make cli ARGS="robots list" # run any CLI command
make cli ARGS="seed"make cli and make link-cli bootstrap the virtual environment on first use.
By default the SQLite database lives at <repo>/upkeep.db regardless of the
current directory, so the CLI and API always share the same data. Override it
with UPKEEP_DATABASE_URL:
UPKEEP_DATABASE_URL="sqlite:////tmp/upkeep.db" upkeep robots listThe repository also includes a product-oriented frontend in web/.
Create a frontend env file:
cp web/.env.example web/.env.localInstall and run:
make web-install
make web-runOpen http://127.0.0.1:3000/ for the Next.js UI.
The frontend expects the FastAPI backend to be running on http://127.0.0.1:8000 by default.
make api-install
make api-run
make web-install
make web-runOverride the port of any run target with PORT (or a per-service variable such as
API_PORT, WEB_PORT, DOCS_PORT):
make api-run PORT=8001
make web-run WEB_PORT=4000Stop one service or all of them (kills whatever listens on the port):
make stop # stop api, docs, and web
make stop api # or: make stop web / make stop docs
make stop api PORT=8001Container build files live in docker/.
make docker-build
make docker-run{
"source": "demo-simulator",
"robot_id": "robot-01",
"robot_name": "Robot 01",
"cell_name": "Cell A",
"ts": "2026-09-19T04:20:00Z",
"payload": {
"temperature_c": 82,
"vibration_mm_s": 8,
"cycle_time_s": 79,
"axis_load_pct": 72
}
}Product documentation lives in docs/ and is built with
Docusaurus. It is authored in English by default.
make docs-install
make docs-run # http://localhost:3000/upkeep/
make docs-buildRun make help to list the available targets.
make opencodeLaunches the opencode TUI with every proxy environment
variable (http_proxy, https_proxy, all_proxy, NO_PROXY, ...) stripped, so
the session talks to the model providers directly instead of through the shell's
proxy. Extra CLI flags can be forwarded:
make opencode ARGS="--model anthropic/claude-sonnet-4-5"