This application serves as a strictly localized web form engine. Its primary constraint is No Database. All states, identities, responses, and settings must be mapped dynamically to JSON files.
The target group operates in German context. All front-end user interfaces, prompts, notifications, and labels must be written in formal German (Sie).
All data payloads process through /data. Any newly introduced state requires modifying this abstraction carefully without abandoning .htaccess safeguards.
Path Map: /data/forms/{form_id}.json
Structure Schema:
{
"id": "form_{uniqid}",
"title": "String",
"description": "String",
"admin_email": "String",
"admin_token": "String",
"created_at": "ISO-8601",
"questions": [
{
"id": "q_{timestamp}_{index}",
"type": "text | textarea | single_choice | multiple_choice | dropdown",
"label": "String",
"options": ["Array of Strings if applicable"],
"allow_free_text": "Boolean (true/false) - for choice configurations"
}
]
}
Path Map: /data/answers/{form_id}_{answer_id}.json
Structure Schema:
{
"answer_id": "ans_{uniqid}",
"form_id": "form_{uniqid}",
"respondent_name": "String",
"respondent_email": "String",
"submitted_at": "ISO-8601",
"answers": {
"q_{timestamp}_{index}": "String or Array of Strings"
}
}
You must refer and conform locally to docs/style_system.md for any interface additions.
panel, btn, alert, and strictly adopting the internal responsive breakpoint mechanisms.respondent_name entries but does not gatekeep. Modifying assets/js/answer.js requires respecting this state requirement.Sortable.js DOM synchronization inside assets/js/create.js.php). No templating engines (Blade/Twig) are attached.