Commit graph

161 commits

Author SHA1 Message Date
906aa751c7 Run the Docker stack on built output instead of dev servers
compose.yaml overrode the image's own entrypoint to start "tsx watch" and
"next dev" with CHOKIDAR_USEPOLLING and WATCHPACK_POLLING enabled. The
built dist/ and .next from the image were never used, and the polling
watchers kept both containers busy around the clock whether or not
anyone used the application.

Split the two use cases: compose.yaml now runs node dist/server/index.js
and next start with no source mounts and no watchers, and the watching
setup moves to compose.dev.yaml.

next build writes the rewrite destinations from next.config.mjs into
.next/routes-manifest.json, so next start cannot pick up API_INTERNAL_URL
at runtime the way next dev does. Pass it as a build argument.

Give the web container its own probe. The healthcheck hit "/", which
redirects to "/projects", and fetch follows redirects, so every probe
rendered two pages every five seconds. "/health" could not serve as the
probe because next.config.mjs rewrites it to the API. Add "/web-health"
as a route handler, exclude it from the proxy matcher, and relax both
intervals to 30s.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 18:25:06 +02:00
a99980c47b Update docs for the code-review fixes
- circuit-list-editor-api.md: next-identifier moved under
  /projects/:projectId and now documents its 404 scoping behavior.
- current-architecture.md: clarify that the BMK trigger register's
  DB-level normalization is ASCII-only and describe the added
  application-level Unicode-aware uniqueness check that closes the
  umlaut gap; note the additive migration 0006 indexes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-06 21:33:28 +02:00
fa96be2d42 Fix crash handling and log noise in logging feature
Review of the logging work from the previous commit turned up a real
correctness issue: the uncaughtException/unhandledRejection handlers
logged the error but let the process keep running, which silently
disabled Node's default crash-on-fatal-error behavior and could leave
a zombie process serving broken requests instead of restarting. Both
processes now log and then exit(1); restart: unless-stopped is added
to both services so Docker actually brings them back up.

Also: harden the logger against JSON.stringify throwing on
non-serializable meta, log aborted (closed-before-finished) requests
in the API access log, and stop the Next.js proxy from logging the
Docker healthcheck's request to "/" every few seconds so real
navigation events aren't drowned out.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-06 19:58:31 +02:00
ea3c02cd6b Add configurable structured logging
Adds a leveled JSON logger (error/warn/info/verbose/debug, controlled via
LOG_LEVEL) wired into the Express API (access log, error middleware,
crash handlers, memory heartbeat) and the Next.js server (page-request
proxy, instrumentation crash handlers, heartbeat). LOG_LEVEL is exposed
through compose.yaml, and both services now rotate their Docker logs
(json-file, 20m x 10 files) instead of growing unbounded. Intended to
capture long-running diagnostic data for the intermittent 502s seen on
the Docker host.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-06 19:45:39 +02:00
74bea1a3c9 Add Revit circuit list object feed 2026-08-02 18:59:01 +02:00
a69b7b603f Add external object new circuit command 2026-08-02 18:55:57 +02:00
347b3717c3 Add external object new row command 2026-08-02 18:44:46 +02:00
1a7dd7fe03 Add external object row assignment command 2026-08-02 18:38:38 +02:00
dac19b093c Add external row quantity foundation 2026-08-02 18:26:22 +02:00
bc2bc7ece5 Add Revit catalog creation flow 2026-08-02 18:08:18 +02:00
ab2449419b Add Revit initial import wizard 2026-08-02 17:52:21 +02:00
8646f346e6 Add Revit initial import apply API 2026-08-02 17:42:29 +02:00
c9e5fdd876 Add Revit initial import planning 2026-08-02 17:38:17 +02:00
c634570018 Add atomic Revit initial import 2026-08-02 17:33:32 +02:00
e87a3289fa Include external models in project snapshots 2026-08-02 17:25:25 +02:00
76493b573e Add external model persistence foundation 2026-08-02 17:18:24 +02:00
a9d6301753 Add Revit CSV project dialog 2026-08-02 16:59:18 +02:00
caa6caf99f Add Revit CSV preview API 2026-08-02 16:49:42 +02:00
219da5ec3b Persist Revit CSV configuration 2026-08-02 16:33:18 +02:00
da689af518 Verify Revit reference CSV 2026-08-02 16:01:05 +02:00
bfe8b790b2 Add Revit CSV transport 2026-08-02 15:56:02 +02:00
43cee890e7 Define Revit CSV contracts 2026-08-02 15:51:52 +02:00
927b868dcb Plan Revit CSV integration 2026-08-02 15:47:12 +02:00
c96ba1cbaf Added revit specs 2026-08-02 15:38:02 +02:00
44b6fde940 Add public building project setting 2026-07-31 17:41:30 +02:00
43a3bb0b69 Align documentation with clean baseline 2026-07-31 16:41:37 +02:00
facf788ce8 Remove circuit structure preview 2026-07-31 14:52:37 +02:00
1eed19ef6b Add editable project floors and rooms 2026-07-31 14:46:06 +02:00
734a2bcfc4 Create clean release database baseline 2026-07-31 14:07:26 +02:00
5bee3cb103 Add distribution board copy and delete controls 2026-07-31 12:03:52 +02:00
4a859f31b8 Complete protected circuit group phase 2026-07-31 08:59:12 +02:00
2d97fafce9 Restore circuit drag placement 2026-07-31 08:33:41 +02:00
7c8d4a7ddf Document protected circuit groups 2026-07-31 08:06:10 +02:00
ab989cc637 Delete populated circuit groups safely 2026-07-31 08:01:55 +02:00
93ec294759 Move circuits between groups 2026-07-31 07:58:42 +02:00
be9c6f0d52 Renumber circuit groups explicitly 2026-07-31 07:53:07 +02:00
0cb280ddb2 Reorder circuit groups 2026-07-31 07:47:45 +02:00
8898117ed4 Configure circuit protection 2026-07-31 07:45:48 +02:00
18ca5eb3d4 Persist circuit protection updates 2026-07-31 07:37:38 +02:00
0c92fbd09e Manage circuit groups 2026-07-31 07:32:46 +02:00
756e307bd8 Manage distribution board components 2026-07-31 07:29:25 +02:00
31589875b5 Render protected circuit structure 2026-07-31 07:22:26 +02:00
ac21d6eb5d WIP multiple sections 2026-07-30 20:27:17 +02:00
7a9530a914 Expose protected tree structure 2026-07-30 20:14:45 +02:00
99bdf6491b Persist populated group deletion 2026-07-30 20:10:10 +02:00
db4c757018 Define circuit group subtrees 2026-07-30 20:06:09 +02:00
3399fcd88b Persist circuit group moves 2026-07-30 20:03:11 +02:00
9ad91887b2 Plan circuit group moves 2026-07-30 19:58:45 +02:00
07925b2fd9 Persist circuit group renumbering 2026-07-30 19:56:59 +02:00
63650a623c Plan circuit group renumbering 2026-07-30 19:51:44 +02:00