尚未偵測到更新。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)