Your data, and our proof
Two things on this page. First a summary of what we do with your data, with a link to the full policy. Then a list of every claim on this site's five presentation pages (home, features, MCP, data, FAQ), and what proves it — because a site that claims without showing is asking to be taken at its word. The Privacy and Legal Notice pages make plenty of claims too; those are legal documents that cite their own sources internally, not this table.
Three cookies, all necessary, no tracker: that's why there's no banner. Your password is never stored, your IP address is not written to the server log, and you export or delete your account with one button — and we then say exactly what leaves and what stays. A written procedure exists for a data breach. Your data is stored in the European Union — in France with OVH, our host, and in Paris with Scaleway, for mail and for backup copies, encrypted before they leave the server. Those are our two sub-processors, under contract, and nobody else processes your data for us. One reservation, stated in the policy: our host can access the server remotely from Canada and the United Kingdom, two countries the European Commission recognises as adequate.
The full detail is in the privacy policy: privacy policy →
What we don't claim. PalmaPlan isn't "GDPR certified": that label only exists at the end of a costly process we haven't started. What we've built is the file an auditing body would ask for — the record of processing activities, the retention periods, the breach procedure, the list of sub-processors. We call that certifiability, and we don't call it anything else. The database isn't encrypted at rest, and we say so here rather than leave it to guesswork.
Every claim, its proof
A claim on the site that isn't an opinion gets a row here, with its proof — an end-to-end recipe (marked R), a test, a document in the repository.
| Claim | Where | Proof |
|---|---|---|
| The MCP server exposes 101 tools, 10 resources and 5 prompts | hero, MCP, FAQ | packages/mcp/src/http.test.ts:268 (expect(tools.length).toBe(94)); R recette-s15.ts (all 94 descriptions and schemas read by a real MCP client) |
| Claude Code connects over HTTP, registers itself, gets your consent in the browser | hero, MCP, FAQ | Real trial (CLI 2.1.81): 401 + WWW-Authenticate, two .well-known documents, POST /oauth/register 201, PKCE S256, consent, POST /oauth/token 200; R recette-s13.ts |
| The issued token is named, visible in preferences, revocable, valid thirty days | hero, MCP, FAQ | Real trial (token "MCP · Claude Code", read+write, 30 days); R recette-s13.ts, recette-s11.ts |
| The screen follows live while an agent writes | hero, MCP, video | R recette-s12.ts (two browsers, one MCP client); the broadcast itself stays under a millisecond in both benchmarks — perceived latency depends on load: 24.6 ms for the 50th client on a single active schedule (S12, flux.perf.test.ts), 83.4–84.6 ms median (p95 up to 95.9 ms) under twenty active schedules in parallel — the normal situation for a multi-user instance —, because of better-sqlite3's single write queue (S17, banc-s17.md §4, shared development machine) |
By invitation, and not self-hostable today: the code isn't published; the service lives at palmaplan.com, where you get in with a code | hero, FAQ | legal/mentions-legales.md §5 (code not published, no licence); deploy/compose.yaml (PALMAPLAN_SIGNUP_MODE=codes by default); R recette-beta.ts (/signup refuses without a code) |
| Free beta, ahead of version 1.0; 1.0 is the author's own switch-over | hero, beta, FAQ | README.md "Positioning"; no billing code in packages/ or apps/ (verified) |
| You draw a block by click-and-drag; move it, resize it, move three at once | features | R recette-s4.ts (double oracle: date columns and canvas pixels) |
| Durations are in working days; weekends, holidays, named closures; a block keeps its duration | features | R recette-s4.ts, recette-s6.ts, recette-s13.ts (closures and absences) |
| Dependencies push, never pull; a violated link stays red | features | R recette-s5.ts (twenty blocks over seven weekends, triple oracle) |
| The critical path lights up at the press of a key and prints | features | R recette-s9.ts (red outline read in pixels and SVG, after reload) |
| Everything undoes; 56 kinds of reversible commands; Ctrl+Z also undoes what an agent wrote | features, MCP | R recette-s1.ts, recette-051.ts, recette-s10.ts |
| Filtering and search live in the page address | features | R recette-s6.ts (the filter in the URL and its reload) |
| Per-block actions in kanban or list form; progress is derived | features, MCP | R recette-s10.ts ("0/3" then "33%" read in pixels and SVG) |
Exports, through your MCP agent (export_schedule, render_schedule): v23 round-trip, CSV, workbook, SVG, PNG, PDF | features, FAQ | R recette-s7.ts, recette-s9.ts, recette-s8.ts — these recipes prove the product can produce these formats through its MCP tools, not that a human gets them from the screen (no download button anywhere in apps/web) |
Imports, through your MCP agent (import_schedule): v23, CSV, a calendar file, the XML of a desktop scheduling tool | features | R recette-s7.ts; import tests in packages/core for calendar and XML |
| The printable preview, ready for the browser's PDF (Ctrl+P) | features, FAQ | R recette-s8.ts (/s/:id/print, a one-page PDF produced by a real browser) |
| Finger and stylus; a List | Timeline view under 900 px | features | R recette-s9.ts (touch phone context, 390 × 844) |
| The screen in French or English | features | R recette-s9.ts; two tests guarantee both languages stay covered |
| The whole grid with the keyboard alone | features | R recette-s9.ts, recette-s10.ts |
| A complete light theme and a complete dark theme | features, screenshots | R recette-s14.ts, written before the code; AA contrast measured ≥ 4.5 |
| A queue of pending changes survives a closed tab through a network outage | features | R recette-s8.ts, recette-s6.ts |
| Three roles checked on every route; a stranger sees nothing | features | R recette-s11.ts; droits.test.ts enumerates every route (22 routes × 5 callers); acces.test.ts replays the owner-only operations under five URL spellings, encoded ones included, and a test fails if any server route is missing from the operations table (since 0.21.1) |
| Invitation by link or email, transfer, a removed access shows instantly | features | R recette-s11.ts, recette-s12.ts |
| Realtime: the other person's screen follows, presence, conflicts are named | features | R recette-s12.ts — latency detailed in the row above (banc-s17.md §4) |
| Paginated, filterable History, with Compare | features, MCP | R recette-s13.ts (first page of 293 entries → 37 ms) |
| Comment threads: a viewer replies, an editor resolves | features | R recette-s13.ts |
| The bell warns you; an evening summary can go out by email | features | R recette-s13.ts (seven kinds of notifications, a fake SMTP — a real SMTP server isn't proven yet) |
| Exclusive editing: the lock is taken, and released in ten seconds | features | R recette-s13.ts (423 LOCKED) |
| Read-only publishing, optional password, embeddable or not | features | R recette-s11.ts |
| 10 resources and 5 prompts (alongside the 101 tools) | MCP | R recette-s15.ts |
A single install command, to https://palmaplan.com/mcp; nothing to install client-side | MCP | README.md "MCP server" (the same command, to a local instance); deploy/jour-j.md §2, step 8 (to palmaplan.com, run on go-live day) |
| The agent speaks in labels, never in internal identifiers | MCP | R recette-s2.ts, recette-s6.ts (played entirely through labels) |
| It simulates before writing | MCP | R recette-s7.ts |
| It undoes and redoes its own work | MCP | R recette-s7.ts, recette-s10.ts |
| It breaks a task into actions, assigns them, checks them off; progress follows | MCP | R recette-s10.ts |
| It can ask to be notified when the schedule changes | MCP | abonnement.test.ts (resources/subscribe); R recette-s13.ts — no known client subscribes today |
| Everything an agent writes is signed under its name in History | MCP, FAQ | R recette-s10.ts, recette-s11.ts |
| A read-only token can't write | MCP | R recette-s8.ts (403 SCOPE_INSUFFICIENT) |
| The MCP server only accepts the address it registered under | MCP | README.md (DNS-rebinding guard); http.test.ts |
| Three cookies, all necessary, no tracker — and why there's no banner | security, FAQ | legal/confidentialite.md §7; legal/registre.md §4.1 |
| Your password is never stored (scrypt, per-person salt); one backup a day, fourteen kept | security, beta | legal/confidentialite.md §9; R recette-s8.ts |
| Your IP address is not written to the server log | security | Tested over a real TCP connection (embarquement.test.ts); R recette-s16.ts point 7 |
| Every retention period is published with the piece of code that applies it | security, data, FAQ | legal/retentions.md §2; compared by script against legal/confidentialite.md §3 |
| Full export with one button, schedules re-importable as they are | security, FAQ | GET /api/v1/me/export (packages/api/src/http/rgpd.ts); R recette-s16.ts point 3 |
| Account deletion with one button; what remains is stated, and it isn't called anonymization | security, FAQ | DELETE /api/v1/me (packages/api/src/http/rgpd.ts); the tombstone, "Deleted user"; R recette-s16.ts points 4–6 |
| Access, portability and erasure rights, exercisable in the product without a ticket or support request | security, data | apps/web/src/composants/Profil.tsx: export in one click ("Export my data"); erasure behind typing your email and two confirmations ("Delete my account" → "Delete" → "Permanently delete my account", not "in two clicks"); R recette-s16.ts points 3 and 4 |
| A written procedure for a data breach, with the legal deadlines | security | legal/violation.md |
| Certifiable, not certified; no label; the database isn't encrypted at rest | security | legal/registre.md §7 |
| Two sub-processors, named and under contract: OVH (hosting) and Scaleway (mail, encrypted backup copies); nobody else processes your data for us | data, FAQ | legal/sous-traitants.md §2 and §5 (both contracts, item by item); legal/confidentialite.md §6 |
| This site sets no cookie and contacts no third party on load | hero, data | Measured by this sprint's recipe: no cookie set after visiting all seven pages, in both languages |
| No pricing page, no payment method requested | beta, FAQ | No billing code in the repository (verified) |
| Your data is stored in the European Union: in France with OVH, in Paris with Scaleway; one reservation, the host's remote access from Canada and the United Kingdom, two countries recognised as adequate | data, FAQ | legal/sous-traitants.md §2 and §4 (the location written into the contracts, and what isn't); legal/confidentialite.md "Where your data is" and §2 |
| 4,804 tests, thirty-three end-to-end recipes, coverage measured per package | beta | note-0.27.0.md (tag v0.27.0) |
| No hosted continuous integration: the verification chain runs by hand before every release | beta | README.md "Commands" |
| The product works entirely without an agent | FAQ | R recette-s3.ts, recette-s4.ts, recette-s6.ts (a real browser, no MCP client) |
| An exported v23 file comes back equal to its canonical form; a report names every loss | FAQ | R recette-s7.ts |
| MCP is an open protocol for discovering and calling tools | MCP, FAQ | The server is built on the official MCP SDK (packages/mcp); .well-known documents follow RFC 8414 and 9728 |
| The video shows a real MCP client, not an animation | hero, caption | scripts/captures-identite.ts (replayable with one command) |
58 claims, covering the site's five presentation pages (home, features, MCP, data, FAQ) — not the two legal pages (privacy, legal notice), which cite their own sources within the document. Most of the 58 are backed by an end-to-end recipe (marked R); the rest by a measured benchmark or figure, a documented real-world trial, or a legal document written against the code that implements it.
Certifiable, not yet certified
What we've built is the file an auditing body would ask for: the record of processing activities, retention periods proven by code that runs, a breach procedure, a list of sub-processors, a privacy policy, and access, portability and erasure rights, exercisable in the product without a ticket or support request — export in one click, erasure behind typing your email and two confirmations. We call that certifiability.
What we don't have, and don't claim to have: no certification, no label, no third-party attestation. A certification — Europrivacy, for instance — covers an organization as much as a product, costs anywhere from a few thousand to tens of thousands of euros, and only makes sense once there's a commercial activity to protect. That's a decision for Xavier Baril, after commercialization.