# Overview The product is a single Python automation script that runs in a Streamlit app. [Provide a high-level overview of your product here. Explain what problem it solves and the name of app integrations required for the automation script.] # Core Features [List and describe every function in your Python automation script. For each function, include: - What it does - Why it's important - The Python SDK names of app integrations related to this feature, such as HubSpot, Salesforce, Monday.com, Jira, etc. - The tool names required to work on the task, such as to get name of the correct SDK and documentation, to edit code, to add new files, etc. - How it works at a high level] # User Experience [Describe the user journey and experience. Include: - Key user flows - User input to be collected via proper Streamlit input elements that best match the input format required for the Python automation script. - Include clear and numbered steps for the user to follow accurately to execute the script. - UI/UX considerations in Streamlit app only] # Technical Architecture [Outline the technical implementation details: - System components must be a single Python file, named 'app.py' - List of Python SDK names to be saved in 'requirements.txt' file. Correct Python SDK names can be identified by the pip install command from the github-repo-search/get-library-docs tool call. Do not need to setup development environment or install dependencies because they will be installed directly from the 'requirements.txt' file by USER. - No .env file required. Have input fields for API key and other authentication data to be manually input by USER instead - Logging using Python's logging import and custom_log import. Apply appropriate log levels across each task to capture user input, output and errors. This is important for logging and debugging. Use this app.py boilerplate: ```python # Boilerplate for logging logic - do NOT edit\r\nimport logging\r\nfrom custom_log import setup_logging\r\nimport streamlit as st\r\nimport re\r\n\r\n# Initialized logging before any other imports - do NOT edit\r\nsetup_logging()\r\n\r\ndef main() -> None:\r\n try:\r\n # Boilerplate for logging logic - do NOT edit\r\n @st.cache_resource\r\n def get_logger() -> logging.Logger:\r\n return logging.getLogger(__name__)\r\n\r\n log = get_logger() # use log to emit log records in your code, such as log.info(), log.error() and others\r\n\r\n # Start of line to write code after this line\r\n # Keep the rest of the app inside this try/except\r\n \r\n pass # Placeholder to edit/replace with generated code\r\n\r\n # End of line to write code before this line\r\n except Exception:\r\n # Log and re-raise so Streamlit still shows the error in the UI - do NOT edit\r\n logging.getLogger(__name__).exception(\"Startup/initialization error during Streamlit script execution\")\r\n raise\r\n\r\n# Allows app to execute immediately so init-time exceptions are caught - do NOT edit\r\nmain()\r\n ``` - Data models - APIs and integrations - Infrastructure requirements] # Development Roadmap [Break down the development process into phases: - MVP requirements - Do not think about timelines whatsoever -- all that matters is scope and detailing exactly what needs to be build in each phase so it can later be cut up into tasks] # Logical Dependency Chain [Define the logical order of development: - Which features need to be built first (foundation) - Getting as quickly as possible to something usable/visible front end that works - Properly pacing and scoping each feature so it is atomic but can also be built upon and improved as development approaches] # Risks and Mitigations [Identify potential risks and how they'll be addressed: - Technical challenges - Figuring out the MVP that we can build upon - Resource constraints]