Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
230e449
test(errors): skip CLI scripts when collecting backend error codes
bpstack Oct 12, 2026
f934b4d
build: pin the Node major per project to what production runs
bpstack Oct 12, 2026
53fe028
build(backend): upgrade pnpm to 10.28.0 and hold new releases for 7 days
bpstack Oct 12, 2026
2f2f1d4
ci(backend): run a single verify script and call scripts with pnpm run
bpstack Oct 12, 2026
2f45f1c
chore: check out PowerShell scripts with CRLF line endings
bpstack Oct 12, 2026
cca5cdd
chore(skills): version the backend skills lock
bpstack Oct 12, 2026
7b78d8f
docs(agents): adopt the harness in backend and import every AGENTS.md…
bpstack Oct 12, 2026
72b5d3c
docs(decisions): record the per-project harness and update the TODO list
bpstack Oct 12, 2026
87539be
docs(todo): point the Node 24 upgrade at the .nvmrc Render reads
bpstack Oct 13, 2026
7591758
fix(restaurant): memoize the daily revenue rows
bpstack Oct 13, 2026
ee18def
build(frontend): hold new dependency releases for 7 days
bpstack Oct 13, 2026
9616c18
ci(frontend): run a single verify script
bpstack Oct 13, 2026
8177f28
chore(skills): version the frontend skills lock
bpstack Oct 13, 2026
e824c6c
docs(agents): adopt the harness in frontend
bpstack Oct 13, 2026
2fb7b92
docs(agents): split the root AGENTS.md between backend and frontend
bpstack Oct 13, 2026
a01550d
docs(agents): link module docs up to their subproject and root
bpstack Oct 13, 2026
5a754b2
docs(decisions): record the linked AGENTS.md levels and close the TOD…
bpstack Oct 13, 2026
ac4a984
docs(agents): correct how OpenCode loads AGENTS.md and trim the root
bpstack Oct 13, 2026
aea9356
docs(db): bring the DB module doc in line with the scripts
bpstack Oct 13, 2026
ad41d56
docs(scheduling/solver): bring the solver doc in line with the code
bpstack Oct 13, 2026
95bab1a
docs(scheduling): describe the validator and endpoints the code runs
bpstack Oct 13, 2026
65462bf
docs(scheduling/ui): bring the scheduling UI doc in line with the code
bpstack Oct 13, 2026
253c974
docs(parking): bring the parking backend doc in line with the code
bpstack Oct 13, 2026
88d8651
docs(parking/ui): bring the parking UI doc in line with the code
bpstack Oct 13, 2026
b6178c6
docs(cashier): bring the cashier backend doc in line with the routes
bpstack Oct 13, 2026
f170b93
docs(cashier/ui): bring the cashier UI doc in line with the code
bpstack Oct 13, 2026
01ddc19
docs(groups): bring the groups backend doc in line with the code
bpstack Oct 13, 2026
4bf9aad
docs(groups/ui): bring the groups UI doc in line with the code
bpstack Oct 13, 2026
11c452c
docs(maintenance): bring the maintenance doc in line with the code
bpstack Oct 13, 2026
f2fe401
docs(blacklist): describe the private photos the code stores
bpstack Oct 13, 2026
273de08
docs(backoffice): bring the backoffice doc in line with the code
bpstack Oct 13, 2026
419be5f
docs(checklist): document the private attachments
bpstack Oct 13, 2026
f0adb06
docs(logbook): bring the logbook doc in line with the code
bpstack Oct 13, 2026
415596c
docs(fnb): document the PDF parser guards
bpstack Oct 13, 2026
6264d6f
docs(todo): add the code findings from the AGENTS.md audit
bpstack Oct 13, 2026
870ab2b
fix(fnb): import pdf-parse from lib and drop the debug test folder
bpstack Oct 13, 2026
48f1efa
docs(tests): describe what each backend test needs, as measured
bpstack Oct 13, 2026
f603541
chore(prettier): leave code blocks in Markdown untouched in both proj…
bpstack Oct 14, 2026
cda96b7
style(docs): reflow Markdown to the repo's Prettier rules
bpstack Oct 14, 2026
4a253ec
ci: check the format of every tracked Markdown file
bpstack Oct 14, 2026
b5391b9
style(todo): collapse the spaces left inside joined code spans
bpstack Oct 14, 2026
6467e0b
docs(agents): run one session from the root and switch Node per side
bpstack Oct 14, 2026
a2ccab5
build(frontend): upgrade Prettier to 3.9.9, the backend's version
bpstack Oct 14, 2026
aa97562
chore(prettier): keep the frontend lockfile out of pnpm format
bpstack Oct 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
*.yml text eol=lf
*.yaml text eol=lf

# PowerShell scripts keep Windows line endings
*.ps1 text eol=crlf

# Denote all files that are truly binary and should not be modified
*.png binary
*.jpg binary
Expand Down
17 changes: 8 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,13 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
node-version-file: backend/.nvmrc
- run: corepack enable
- run: pnpm install --frozen-lockfile
# tests/frontend loads pdf-lib from the frontend's node_modules
- run: pnpm install --frozen-lockfile
working-directory: frontend
- run: pnpm lint
- run: pnpm format:check
- run: pnpm typecheck
- run: pnpm test
- run: pnpm run verify

frontend:
runs-on: ubuntu-latest
Expand All @@ -41,9 +38,11 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
node-version-file: frontend/.nvmrc
- run: corepack enable
- run: pnpm install --frozen-lockfile
- run: pnpm lint
- run: pnpm format:check
- run: pnpm typecheck
- run: pnpm run verify
# Every tracked Markdown file in the repo, each with its nearest .prettierrc
- name: Check Markdown format
working-directory: .
run: git ls-files -z '*.md' | xargs -0 frontend/node_modules/.bin/prettier --check --ignore-path .prettierignore --ignore-path frontend/.prettierignore
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ backend/scheduling-solver/venv/
# Claude Code Templates & Skills
# --------------------------------------------
.claude/
**/skills-lock.json

# --------------------------------------------
# Local Scripts
Expand Down
986 changes: 172 additions & 814 deletions AGENTS.md

Large diffs are not rendered by default.

5 changes: 3 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# CLAUDE.md
@AGENTS.md

This file has been migrated to `AGENTS.md`. Please refer to `AGENTS.md` for all project documentation.
This file has been migrated to `AGENTS.md`. Please refer to `AGENTS.md` for all
project documentation.
37 changes: 19 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ scheduler that solves the monthly roster with constraint programming.
![Four-Points dashboard](docs/images/dashboard.png)

It complements the hotel's commercial PMS (Opera): logbook, parking,
maintenance, groups, cashier, blacklist, staff scheduling, shift checklists,
F&B revenue and invoice backoffice.
maintenance, groups, cashier, blacklist, staff scheduling, shift checklists, F&B
revenue and invoice backoffice.

| Staff scheduling (OR-Tools) | Parking |
| --- | --- |
| Staff scheduling (OR-Tools) | Parking |
| --------------------------------------------------------------------- | -------------------------------------------- |
| ![Monthly roster generated by the solver](docs/images/scheduling.png) | ![Parking overview](docs/images/parking.png) |

- **Frontend**: Next.js 16 (App Router), React 19, Tailwind CSS, NextUI.
Expand All @@ -36,19 +36,20 @@ Full documentation lives in [`docs/`](docs/general/README.md):
- [Backoffice](docs/backoffice/README.md)
- [Blacklist](docs/blacklist/README.md)
- [Conciliation](docs/conciliation/README.md)
- [Public demo](docs/demo/README.md) — how the demo account works and when it resets
- [Public demo](docs/demo/README.md) — how the demo account works and when it
resets

## Try it

A public demo runs on the project site: **Try our live demo** on the login
page signs you in as an administrator, with fictitious data that resets every
day. User management and settings are locked there. To see everything, run it
A public demo runs on the project site: **Try our live demo** on the login page
signs you in as an administrator, with fictitious data that resets every day.
User management and settings are locked there. To see everything, run it
locally.

## Run it locally

You need Node ≥ 22.16, pnpm, Python 3.11+ (for the scheduling solver) and
MySQL 8, either installed or through Docker. `frontend/` and `backend/` are
You need Node ≥ 22.16, pnpm, Python 3.11+ (for the scheduling solver) and MySQL
8, either installed or through Docker. `frontend/` and `backend/` are
independent pnpm projects, each with its own lockfile.

```bash
Expand Down Expand Up @@ -76,15 +77,15 @@ pnpm dev:local # backend/: API on :4000
cd frontend && pnpm install && pnpm dev # http://localhost:3000
```

Sign in as **`admin`** / **`fourpoints-local`**: a full administrator,
users, roles and settings included. The password is public on purpose:
`setup:local` only runs against a local database, so this account never
exists anywhere else. Change it in Profile if you like.
Sign in as **`admin`** / **`fourpoints-local`**: a full administrator, users,
roles and settings included. The password is public on purpose: `setup:local`
only runs against a local database, so this account never exists anywhere else.
Change it in Profile if you like.

Uploading photos and PDFs needs a Cloudinary account in `backend/.env`.
Without it everything else works, and an upload just says storage is not
configured.
Uploading photos and PDFs needs a Cloudinary account in `backend/.env`. Without
it everything else works, and an upload just says storage is not configured.

## License

This project is licensed under the MIT License — see the [LICENSE](LICENSE) file for details.
This project is licensed under the MIT License — see the [LICENSE](LICENSE) file
for details.
File renamed without changes.
1 change: 1 addition & 0 deletions backend/.prettierrc
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"options": {
"printWidth": 80,
"proseWrap": "always",
"embeddedLanguageFormatting": "off",
"tabWidth": 2
}
}
Expand Down
Loading
Loading