diff --git a/domain-skills/luxinnovation-events/applications.md b/domain-skills/luxinnovation-events/applications.md new file mode 100644 index 00000000..b9293103 --- /dev/null +++ b/domain-skills/luxinnovation-events/applications.md @@ -0,0 +1,72 @@ +# events.luxinnovation.lu — grant / accelerator application forms + +Luxinnovation runs its programme applications (Fit 4 Start, etc.) on a multi-section +form at `events.luxinnovation.lu/e//...`. The application is a long server-saved +draft. These notes are for *filling* it reliably. + +## Structure + +- Two top tabs: **Information** (the long form) and **Team members** (separate member records). +- Left nav lists sections (Eligibility, Company details, Project, Value proposition, + Development stage, Team & collaboration, Financing, Additional Information, Disclaimer, …). +- Each section has its own **Save** button (bottom centre). Save is per-section, not global. +- A section shows a **warning triangle** in the left nav until all its required fields are + filled. The tab badge (e.g. "Team members 1") counts incomplete records. +- Status stays **Draft** until you hit **Submit your application** (top right). Saving a + section does not submit. + +## The trap that will waste your time + +**Setting input/textarea values with the React-style synthetic pattern** +(`Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value').set` + dispatch +`input`/`change`) **makes the field look filled but the value is dropped on Save** — the +section reloads empty and the warning triangle never clears. The form's framework only +commits values it received through real key events. + +Fill instead with **compositor-level typing**: focus the element, select-all, then CDP +`Input.insertText`: + +```python +el = ... # the target input/textarea (tag it with a data attr to re-find it) +js("(()=>{const e=document.querySelector('[data-fidx=\"3\"]'); e.focus(); e.select&&e.select(); document.execCommand('selectAll');})()") +cdp("Input.insertText", text="my value") +js("document.activeElement && document.activeElement.blur()") +``` + +**Always verify persistence by reload, not by reading the DOM you just wrote.** Switch to +another section and back (or `location.reload()` and wait), then re-read the field / check +whether the nav triangle cleared. The on-screen state right after a JS write lies; the +server-saved state is the truth. + +## Custom dropdowns (country, stage, gender, counts) + +Not native `