File size: 3,076 Bytes
d9c2461
 
a081a02
 
 
d9c2461
 
 
a081a02
 
d9c2461
 
 
a081a02
 
 
 
2b78832
a081a02
 
2b78832
 
a081a02
 
 
 
 
 
d9c2461
a081a02
 
d9c2461
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a081a02
d9c2461
a081a02
 
2b78832
a081a02
 
 
 
 
 
 
 
d9c2461
a081a02
 
d9c2461
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
"""kwest.dev is a saas tool to craft stories for your ideas."""

import os

import requests
import streamlit as st


API_URL = os.getenv("API_URL", None)
AUTH_TOKEN = os.getenv("AUTH_TOKEN", None)
RECIPES = ["sell", "motivate", "convince", "connect", "explain", "lead", "impress"]
VALID_EMOJIS = {"yes": "βœ…", "no": "❌"}

if not API_URL or not AUTH_TOKEN:
    raise ValueError("API_URL and AUTH_TOKEN secrets must be set in the environment variables.")


def check_if_input_is_valid(input_str: str) -> bool:
    """Check if the input string is valid for the API."""
    response = requests.post(
        f"{API_URL}input-check",
        headers={"Authorization": f"{AUTH_TOKEN}", "Accept": "application/json"},
        json={"input": input_str},
    )
    if response.status_code == 200:
        return response.json()["output"]
    else:
        return None


# UI
st.title("kwest.dev")
st.subheader("Leverage the power of storytelling for any idea. πŸ’‘")

with st.expander(label="How to present your idea to get the best story πŸ‘‡", expanded=True):
    st.markdown(
        """
        - 🎯 Explain the **main objective** of your idea. What is the **main goal** you are trying to achieve?
        - πŸ“ Give as much **context** as possible. For example, what is the problem you are trying to solve? If you have a good name for your idea, share it.
        - πŸ‘€ What is the **audience** for your idea? Who are the people that should be interested in it?

        Once you have shared this information, we will propose 2 recipes for your story. Choose the one you like the most between the two.

        The different recipes available are: `sell`, `motivate`, `convince`, `connect`, `explain`, `lead`, `impress`

        If you aren't satisfied with the recipes proposed, you can choose a different one below.

        __Examples of good and bad inputs:__

        βœ… `I need a pitch for a new app that helps people find the best restaurants in town. I will present it to angel investors. The name of the app is "Foodie".`
        
        ❌ `I need a pitch for a new app. It's cool.`
        """
    )

input_col, btn_col =  st.columns([3, 1], vertical_alignment="bottom")
with input_col:
    input_str = st.text_area("Your idea that needs a story", "", placeholder="I need a pitch for ...")
with btn_col:
    check_input = st.button(label="▢️", key="check_input", help="Check if the input is valid")

if check_input:
    input_is_valid = check_if_input_is_valid(input_str)
    if input_is_valid is None:
        st.error("An error occurred while checking the input. Please try again.")
        st.stop()
    else:
        st.write(
            f"Objective: {VALID_EMOJIS[input_is_valid['objective']]} | "
            f"Context: {VALID_EMOJIS[input_is_valid['context']]} | "
            f"Audience: {VALID_EMOJIS[input_is_valid['audience']]}"
        )

        if input_is_valid["objective"] == "yes" and input_is_valid["context"] == "yes" and input_is_valid["audience"] == "yes":
            st.write("Choose the recipe you want to use for your story.")