Create a web application for organizing user tasks. Each task should include the following fields: - Title - Description - Deadline date (only year, month, day) - Priority level - Category Users should be able to define custom categories and custom priority levels. Default values for custom categories and custom priority levels can be set in a settings page. Include a calendar view for visualizing tasks. Tasks can be created in two ways: - Manually, using a standard input form. - By voice command — the user clicks a microphone button and describes the task verbally. - The system records the audio and uses a public Speech-to-Text API to convert the speech into text. Use 'whisper-large-v3' model. - The transcribed text is then sent to a public LLM API, which extracts and structures the task details (title, description, deadline, etc.). Use 'moonshotai/kimi-k2-instruct-0905' model. - The structured task is then saved into the database. - The deadline date, priority level, and category are not required. - If there is an error while parsing the structured data, display which task fields were successfully extracted and ask for confirmation. Tasks can be edited. Implementation details: - Build the app using a single HTML file with JavaScript for functionality and Twilight CSS for styling. - Use the browser’s local storage as the database for storing tasks. Public Speech-to-Text API usage example: curl https://api.groq.com/openai/v1/audio/translations \ -H "Authorization: bearer ${GROQ_API_KEY}" \ -F "file=@./sample_audio.m4a" \ -F model=whisper-large-v3 \ -F prompt="Specify context or spelling" \ -F language="en" \ -F temperature=0 \ -F response_format=json Public LLM API usage example: curl "https://api.groq.com/openai/v1/chat/completions" \ -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${GROQ_API_KEY}" \ -d '{ "messages": [ { "role": "user", "content": "" } ], "model": "moonshotai/kimi-k2-instruct-0905", "temperature": 0.6, "max_completion_tokens": 4096, "top_p": 1, "stream": true, "stop": null }'