尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Planning tool for shipyard subcontractors (cleaning & protection orders)
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗HullOps is a planning tool for subcontractors who work on shipyards. Project leads plan cleaning and protection jobs on vessels, put a team on each job, and follow its progress until it's done.
Live demo: https://hullops.vercel.app (demo data only; log in with a seeded demo user, see Getting started). Meant for a phone: open it there and add it to the home screen.
Status: in development. The API covers vessels, orders, teams, comments and login with roles. The web app, in English and German, has login, the order overview, order details with status updates, comments and team management, and creating orders. It is mobile first and installable as a PWA (see Roadmap).
Subcontractors on a shipyard do two kinds of work, which can run at the same time on the same vessel:
Protection uses materials such as OSB (standard or fire-resistant), Proplex (3 mm or HD), and glass fiber fabric, which protects against fire and welding sparks.
Each job is an order for one vessel. An order moves from PLANNED to IN_PROGRESS to DONE, has a team of workers, and keeps a history of status updates with photos. An order is overdue when its due date has passed and it isn't done yet.
HullOps comes from a real way of working. On the yard, planning and all communication run through WhatsApp, and Crewmeister holds working hours and leave. The goal is to move the planning out of chat threads into one place, and keep WhatsApp for what is genuinely live. The choices below follow from that.
Who uses it, and why there are four roles
| Role | Who | Why it exists |
|---|---|---|
| Project lead | The office | Plans orders, passes on what the shipyard tells them, manages teams, and invoices the customer. |
| Team lead (Vorarbeiter) | On the yard, one per vessel | Knows what his vessel needs, so he asks for workers for the coming week himself, including by name. |
| Worker | On the yard | Reads the plan and updates the status of his orders. |
| HR | Office | Hires people, so creates workers, team leads and project leads (recording absence is planned). Cannot create or touch administrators or other HR, and sees no orders, vessels or staffing. |
| Administrator | Technical | Manages accounts. Reads everything but doesn't run the work, so responsibilities stay separate. |
The shipyard's own people (the customer's side) have no login. The project lead enters what they say as free-text comments, so the app doesn't need accounts for other companies and stays single-tenant.
Decisions and their reasons
CLEANING, IN_PROGRESS) and the web app translates them, English and German, because it is mainly used in Germany.More detail: docs/ux.md describes who uses the app, the bar it is held to (any new user can use it after an hour of explanation) and the main flows with sketches. docs/caching.md says what is cached, what is not and why.
Planned: leave and sickness from Crewmeister
Workers have a profile in both systems, and you can't plan someone who is on leave. The plan is a small "availability" model in HullOps that the planning page uses (unavailable workers are marked, and a request by name for someone absent gives a warning), fed by interchangeable sources behind one interface: a demo source with sample data, and a Crewmeister source using its V3 absence API.
This is not built yet; see the Roadmap.
| Part | Technology |
|---|---|
API (apps/api) | NestJS, GraphQL (Apollo, code-first), Prisma 7, PostgreSQL 16 |
Web (apps/web) | Next.js 16 (App Router, Server Actions), React 19, Tailwind CSS v4, next-intl (English/German) |
| Tooling | pnpm workspaces, TypeScript, Jest, oxlint / ESLint, GitHub Actions |
You need Node 24, pnpm 12 and Docker.
pnpm install # install all workspaces
docker compose up -d db # start Postgres 16 on :5432
cp apps/api/.env.example apps/api/.env # point the API at that database
cd apps/api
pnpm exec prisma migrate deploy # create the tables
pnpm exec prisma generate # generate the typed database client
pnpm exec prisma db seed # optional: demo users, vessels and orders
cd ../..
pnpm dev # API on :4000, web on :3000
Then open:
[email protected] (password hullops-dev).The repo includes settings for VS Code and Cursor in .vscode/. When you open the project, the editor suggests the recommended extensions:
.env highlightinggraphql.config.yml points the GraphQL extension at the API's generated schema, so queries get autocomplete and validation.
hullops/
├── apps/
│ ├── api/ NestJS GraphQL API and the Prisma schema; see apps/api/README.md
│ └── web/ Next.js frontend; see apps/web/README.md
├── .github/workflows/ CI
├── .vscode/ editor settings and recommended extensions
└── docker-compose.yml local Postgres
Run these from the repository root:
pnpm dev # run API and web in parallel
pnpm -r lint # lint all apps
pnpm -r test # unit tests
pnpm --filter api test:e2e # API end-to-end tests (use their own hullops_test database)
pnpm -r build # production builds
Every push to main and every pull request runs the CI workflow against a throwaway Postgres container. It installs dependencies, generates the Prisma client, applies migrations, then runs lint, unit tests, API end-to-end tests and builds.
The web app goes on Vercel, the API runs as a container (see apps/api/Dockerfile) next to a managed PostgreSQL. Steps, environment variables and caveats are in DEPLOYMENT.md.
[email protected] in the demo data)