From 3df1a6fa50d33d74bc4f40ea22edb21d0a7c3f50 Mon Sep 17 00:00:00 2001 From: Tom Gotsman <64492814+tgberkeley@users.noreply.github.com> Date: Mon, 25 Nov 2024 11:19:13 -0800 Subject: [PATCH] Ansa case study (#1065) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * first half of ansa case study * finish first version * first proofread * final small fixes and make investors optional to render * Ansa edits on case study (#1080) * Ansa edits on case stuyd * small fixes --------- Co-authored-by: Tom Gotsman * add image and final ryan updates * fix doc * add svgs * context menu and alert dialog doc updates (#1063) Co-authored-by: Tom Gotsman * Pin reflex version to reflex main (#1070) * Add changelog entry for 0.6.4 (#1061) * add docs on rx.field and rx.Field (#1071) Co-authored-by: Tom Gotsman * dashboard intro tutorial (#1045) * first half of tutorial * final first version * first version complete * updates from aditya feedback * final update * add to sidebar --------- Co-authored-by: Tom Gotsman * @rx.event (#1064) * @rx.event * change background to event * update for rx.event docs * fix spaces to tabs * add back context sub menu --------- Co-authored-by: Tom Gotsman * modernize global hotkey watcher (#1069) * move docs to use dataclasses (#1072) * add chat app in one page (#1073) * add chat app in one page * remove old chat tutorial and add a new section for advanced onboarding * added advanced onboarding section --------- Co-authored-by: Tom Gotsman * waitlist page hosting (#1075) * waitlist page hosting * More updates --------- Co-authored-by: Carlos Co-authored-by: Alek Petuskey * fix links after rearrange onboarding PR (#1076) Co-authored-by: Tom Gotsman * [HOS-211] Mobile view + docs hosting banner fix (#1078) * fix wrong values to props (#1079) * preconnet to gfonts + navbar fix (#1054) * fix a typo (#1081) * fetch github stars count (#1084) * Optimize AG Grid state (#1082) * Add missing ``` at end of project-structure.md code box (#1088) * changelog for 0.6.5 (#1083) * Add llms.txt (#1095) * Add llms.txt * Whitelist --------- Co-authored-by: Alek Petuskey * [ENG-4127][ENG-4128][ENG-4126][ENG-4125]UI overview section improvements (#1097) * UI overview improvements * Add next/prev for state overview * More shiki cleanup (#1093) * More shiki cleanup * intro page * use a shiki markdown based wrapper * fix ref * minor refactor * skip compile for backend only (#1092) * move 'manual titles' to their respective files * improve skip compile check * Update pseudo style prop for chakra ui link (#1096) The link for the documentation of Chakra UI for pseudo style prop has been updated. This PR changes that in the documentations. The current url points to a 404. --------- Co-authored-by: Tom Gotsman Co-authored-by: rsullivan05 <72361732+rsullivan05@users.noreply.github.com> Co-authored-by: Carlos Co-authored-by: Elijah Ahianyo Co-authored-by: Masen Furer Co-authored-by: Khaleel Al-Adhami Co-authored-by: Alek Petuskey Co-authored-by: Alek Petuskey Co-authored-by: Carlos <36110765+carlosabadia@users.noreply.github.com> Co-authored-by: Thomas Brandého Co-authored-by: Pablo Garcia Perez Co-authored-by: Jay Vala <24193355+jdvala@users.noreply.github.com> --- assets/case_studies/ansa_app.png | Bin 0 -> 85875 bytes assets/customers/dark/ansa/ansa_middle.svg | 10 + assets/customers/dark/ansa/ansa_small.svg | 3 + assets/customers/dark/ansa/ansa_top.svg | 3 + assets/customers/light/ansa/ansa_middle.svg | 11 ++ assets/customers/light/ansa/ansa_small.svg | 3 + assets/customers/light/ansa/ansa_top.svg | 3 + case-studies/ansa.md | 181 ++++++++++++++++++ pcweb/pages/customers/data/customers.py | 2 +- pcweb/pages/customers/views/bento_cards.py | 11 +- pcweb/pages/customers/views/customers_list.py | 2 + pcweb/styles/tailwind_config.py | 72 +++++++ pcweb/templates/storypage.py | 11 +- 13 files changed, 304 insertions(+), 8 deletions(-) create mode 100644 assets/case_studies/ansa_app.png create mode 100644 assets/customers/dark/ansa/ansa_middle.svg create mode 100644 assets/customers/dark/ansa/ansa_small.svg create mode 100644 assets/customers/dark/ansa/ansa_top.svg create mode 100644 assets/customers/light/ansa/ansa_middle.svg create mode 100644 assets/customers/light/ansa/ansa_small.svg create mode 100644 assets/customers/light/ansa/ansa_top.svg create mode 100644 case-studies/ansa.md diff --git a/assets/case_studies/ansa_app.png b/assets/case_studies/ansa_app.png new file mode 100644 index 0000000000000000000000000000000000000000..7e83c6923d1f3078fa4041c907c5a2697f39dee5 GIT binary patch literal 85875 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 + + + + + + + + + diff --git a/assets/customers/dark/ansa/ansa_small.svg b/assets/customers/dark/ansa/ansa_small.svg new file mode 100644 index 000000000..fead9b9ca --- /dev/null +++ b/assets/customers/dark/ansa/ansa_small.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/customers/dark/ansa/ansa_top.svg b/assets/customers/dark/ansa/ansa_top.svg new file mode 100644 index 000000000..fead9b9ca --- /dev/null +++ b/assets/customers/dark/ansa/ansa_top.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/customers/light/ansa/ansa_middle.svg b/assets/customers/light/ansa/ansa_middle.svg new file mode 100644 index 000000000..e664271b0 --- /dev/null +++ b/assets/customers/light/ansa/ansa_middle.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/assets/customers/light/ansa/ansa_small.svg b/assets/customers/light/ansa/ansa_small.svg new file mode 100644 index 000000000..617fc46d3 --- /dev/null +++ b/assets/customers/light/ansa/ansa_small.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/customers/light/ansa/ansa_top.svg b/assets/customers/light/ansa/ansa_top.svg new file mode 100644 index 000000000..617fc46d3 --- /dev/null +++ b/assets/customers/light/ansa/ansa_top.svg @@ -0,0 +1,3 @@ + + + diff --git a/case-studies/ansa.md b/case-studies/ansa.md new file mode 100644 index 000000000..3c8fb4d5d --- /dev/null +++ b/case-studies/ansa.md @@ -0,0 +1,181 @@ +--- +company: Ansa +description: "Why Ansa chose Reflex over a no-code/low-code framework for their workflow automations" +domain: "https://www.ansa.co" +founded: "New York, 2021" +investors: "" +stats: [ + { + "metric": "Companies scored every month", + "value": "16,000" + }, + { + "metric": "Core company workflows optimized", + "value": "8" + }, + { + "metric": "Hours of manual work saved a month", + "value": "100+" + } +] +meta: [ + { + "name": "keywords", + "content": " + python web app, + anvil, + python anvil, + anvil python, + low code python web app, + no code python web app, + venture capital python, + python web app framework, + python web apps, + web app framework python, + web app python, + " + } +] +--- + +```python exec +import reflex as rx +from reflex_image_zoom import image_zoom +``` + +```python eval +rx.vstack( + image_zoom(rx.image(src="/case_studies/ansa_app.png", border_radius="10px", alt="Ansa App")), + rx.text("Ansa App built with Reflex"), + width="100%", +) +``` + +Meet [Ansa](www.ansa.co), a venture capital firm based in New York City that invests in companies from Series A to C. They have invested in companies like Defense Unicorns, Bland, Gradient, and Selector and prior to founding the firm, supported investments in many of the venture-capital industry’s largest outcomes including Crowdstrike, Coinbase, and SurveyMonkey to name a few. + +Ryan Sullivan is an investor and oversees the engineering and data science team at Ansa. He finds and supports new investments and is the architect behind Ansa's data-driven sourcing strategy, working closely with the firms’ Managing Partner Marco Demeireles to build the firms’ proprietary sourcing applications and research products. + + +## Ansa's data analysis challenge + +Ansa has an investable universe of 10s of thousands of companies and they need to make sure they are spending time with the right companies at the right time. Their sourcing is thesis driven, so they need to both quickly find all companies in a theme of interest and track opportunities across the broader market. With a lean investment team, they need to leverage software and data to review and track all these opportunities. + +Ryan and his team's goal was to automate and augment as much as they could on this company sourcing and review workflow. This included helping their lean investment team be more efficient and effective in finding interesting companies and reaching out to them. They also began using Data Science and Machine Learning to help surface more relevant companies leverage proprietary and third party data sources. + +```md quote +- name: Ryan +- role: Investor and Head of Data +We have a lean investment team and there's a lot of opportunities out there, so we're trying to automate as much as we can on the workflow side to help our team be efficient and research, review, and reach out to as many companies as possible. +``` + +They wanted custom tools to give them an edge, such as an in-house scoring model to help flag important companies. + + +## How Ansa hit the limits of a low-code python framework + +Ryan and his team wanted to build a web interface so the broader team could run these automations to automate their manual workflows. They wanted a pure python solution as this was the language the team was most familiar with. + +```md quote +- name: Ryan +- role: Investor and Head of Data +We don't have a full engineering team, so to build a full web app from scratch seemed like a lot to manage. In addition, our team is mostly data engineers / analysts so we are far more comfortable with Python than JavaScript. +``` + +The team previously built on an all-python, low-code / no code framework. They didn't like the aesthetic and wanted to use more modern looking React components. + +```md quote +- name: Ryan +- role: Investor and Head of Data +It’s an older framework and the components didn't look that good. We wanted to use react components and just make it look a little bit more modern. +``` + +Their main concern though was that they didn't want to outgrow a near no code framework, as they wanted to build their app for the long term. + + +```md quote +- name: Ryan +- role: Investor and Head of Data +We don't want to run into a situation where this year or next year, we want to add more functionality that this low code framework doesn't have and we're not able to integrate it. Additionally, the rate of improvement and development velocity from the Reflex team gave us confidence that their offering would continue to improve over time. We're building this for the long term and we want to make sure we both have the flexibility to not outgrow it and are working with the best out there. +``` + +In addition, there were particular technologies like LLMs and Vector Databases that Ryan and the team knew at some point they would want to integrate into the app. It would be extremely difficult if not impossible to keep up with these latest innovations with low/no code frameworks. + + +```md quote +- name: Ryan +- role: Investor and Head of Data +I started to feel that with this framework I didn’t know if they could keep up with the pace of new developments with LLMs. They abstract a lot of the backend, so it's difficult to install third party libaries and you don't have full control over the database. For example some of the newer stuff we do with vector databases, embeddings models, or LLMs would be harder to do with this framework as we'd have to move off their native database. +``` + + +## From manual work to automation with Reflex + +Ansa switched to Reflex so they could build an app for the long term and accommodate all the latest innovations in LLM development without needing any JavaScript. + +They currently have an app with 8 different core company workflow automations, several of which we will discuss in this case study. + +The main challenges that Ansa faces are one, figuring out what companies, out of the 10s of thousands within their investment mandate, they should be investigating further, and two, automating all the manual data collection and work required to reach out. + + +### Creating natural language company search + +The first automated workflow they built, using a combination of OpenAI, Langchain, and Chroma, introduced vector and natural language searches over their database. This allows employees to combine quantitative and strict filtering with an understanding of the companies product offering through vector similarity. For example, an employee can type "Carbon accounting software companies with a CEO in NYC that score over 60" and receive a curated list of companies that fit that description. + +```md quote +- name: Ryan +- role: Investor and Head of Data +We use LLMs to help navigate through the companies site and find different details. For example the customer page for one website, may be different from another. The LLM then summarizes all that data and creates embeddings on them and then we use that for the searches. The LLMs help us normalize across different companies, even if pages are named differently, so we can easily search through all of them and figure out what the company does. +``` + +### In-house company scoring algorithm + +The next automated workflow takes this list of companies and scores them. With private companies, there is far less data available to assess fit than with public companies, so they rely on alternative data to power a scoring algorithm that assesses the probability a given company is a fit for their investment workflow. They proactively score ~15K companies and display them in Reflex, and also built another automated workflow to score ad-hoc lists of companies. This workflow can take in a list in any format and send the identifiers to their API where they are scored by their custom ML model hosted in Databricks. + +The scored data is then displayed to the user in Reflex and emailed to the user as a CSV. This ML model is trained on a labeled dataset they have curated over years, and spots combinations of factors that they believe will lead to successful investments for the fund. + + +### Improving email outbound + +Finally, when their team has a short list of companies that fit within an investment, they built a third workflow to automate the extraction of the relevant information to reach out to these companies. Ryan runs us through this final workflow in his quote below. + + +```md quote +- name: Ryan +- role: Investor and Head of Data +Let’s say we have 30 companies that we want to email. How can you efficiently send a custom note to each of these companies and track it properly? We launch a script, that runs through a Reflex background event, that'll go through each company, check the CRM ownership, fill out relevant fields and find the best person to reach out to. A lot of times, especially with early stage companies, data is missing or partially complete. So this workflow will leverage LLMs throughout the process to handle fuzzy matching and make contextual decisions, as well as proactively summarize company content, news, and relevant Ansa content to help support the email writing. Before we would do this all manually, now with this new workflow in Reflex, we've taken what was once 30+ clicks across 5 different apps and made it 5x faster with 2 clicks across 2 apps. +``` + +All these different workflows are now built into a single Reflex app. It makes it extremely easy for anyone on the team to run any of these workflows and leverage LLM-powered automation with a few clicks. + +Throughout building this Reflex app, Ryan used: + +- Supabase database to store all their data + +- LLM tools like OpenAI, Tavily, Browserbase, Langchain, and Chroma + +- Google Auth login component for Ansa employees to log in + +- AG Grid Table Component + +- Download Functionality + + +Overall Ansa found that with Reflex, as everything is in pure python, they were able to integrate everything they wanted and knew they always could incorporate new tech, which was a concern with their previous framework. + + +```md quote +- name: Ryan +- role: Investor and Head of Data +Reflex was a better fit overall. Given that it's just python code, I'm always comfortable that we'll be able use different tools and to figure out how to make it work with Reflex versus being stuck with the integrations that our old solution had. +``` + + +## What Ansa gained from using Reflex + +The app that Ryan and his team created, which contains 8 different automated workflows, is now a central dependency for Ansa to source potential companies and analyze them. + +```md quote +- name: Ryan +- role: Investor and Head of Data +75% of our team uses the app on a weekly basis and we estimate we're saving over ~100 team hours per month. +``` diff --git a/pcweb/pages/customers/data/customers.py b/pcweb/pages/customers/data/customers.py index 070ead054..552036403 100644 --- a/pcweb/pages/customers/data/customers.py +++ b/pcweb/pages/customers/data/customers.py @@ -43,7 +43,7 @@ def get_route(path: str): investors=document.metadata["investors"], stats=document.metadata["stats"], meta=document.metadata["meta"], - )(lambda doc=document: content(document)) + )(lambda doc=document: content(doc)) # # Add the route to the list of routes. customers_routes.append(comp) diff --git a/pcweb/pages/customers/views/bento_cards.py b/pcweb/pages/customers/views/bento_cards.py index 91d1b0da0..9511a1541 100644 --- a/pcweb/pages/customers/views/bento_cards.py +++ b/pcweb/pages/customers/views/bento_cards.py @@ -11,7 +11,7 @@ def card(company: str, text: str) -> rx.Component: ), alt=f"{company} logo", loading="lazy", - class_name="absolute top-10 left-10 z-[2]", + class_name="absolute top-10 left-10 z-[2] max-h-[32px]", ), # Center company logo rx.image( @@ -21,7 +21,7 @@ def card(company: str, text: str) -> rx.Component: ), alt=f"{company} small logo", loading="lazy", - class_name="absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 z-[2]", + class_name="absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 z-[2] max-h-[88px]", ), # Wave pattern rx.html( @@ -93,5 +93,10 @@ def bento_cards() -> rx.Component: company="bayesline", text="Why Basyesline Chose Reflex over Plotly Dash", ), - class_name="grid grid-cols-1 lg:grid-cols-1 gap-4 mx-auto w-full max-w-[69.25rem]", + # Ansa + card( + company="ansa", + text="Why Ansa chose Reflex over a no-code/low-code framework for their workflow automations", + ), + class_name="grid grid-cols-1 lg:grid-cols-2 gap-4 mx-auto w-full max-w-[69.25rem]", ) diff --git a/pcweb/pages/customers/views/customers_list.py b/pcweb/pages/customers/views/customers_list.py index a5231bdd0..20b3a48ce 100644 --- a/pcweb/pages/customers/views/customers_list.py +++ b/pcweb/pages/customers/views/customers_list.py @@ -202,6 +202,8 @@ def customers_list() -> rx.Component: customers_list_item("AutoDesk", "https://www.autodesk.com/", "SaaS"), # Bayesline customers_list_item("Bayesline", "/customers/bayesline", "AI", True), + # Ansa + customers_list_item("Ansa", "/customers/ansa", "Dev Tools", True), # Your company your_company_item("Your company", getting_started.introduction.path, ""), class_name="flex flex-col max-w-[40rem] justify-center w-full items-center", diff --git a/pcweb/styles/tailwind_config.py b/pcweb/styles/tailwind_config.py index f7f31b314..b8714a3a2 100644 --- a/pcweb/styles/tailwind_config.py +++ b/pcweb/styles/tailwind_config.py @@ -81,6 +81,78 @@ }, ], }, + "fontSize": { + "xs": [ + "0.75rem", + { + "lineHeight": "1rem", + "letterSpacing": "-0.00375rem", + }, + ], + "sm": [ + "0.875rem", + { + "lineHeight": "1.25rem", + "letterSpacing": "-0.01rem", + }, + ], + "base": [ + "1rem", + { + "lineHeight": "1.5rem", + "letterSpacing": "-0.015rem", + }, + ], + "lg": [ + "1.125rem", + { + "lineHeight": "1.625rem", + "letterSpacing": "-0.01625rem", + }, + ], + "xl": [ + "1.25rem", + { + "lineHeight": "1.75rem", + "letterSpacing": "-0.028125rem", + }, + ], + "2xl": [ + "1.5rem", + { + "lineHeight": "2rem", + "letterSpacing": "-0.0375rem", + }, + ], + "3xl": [ + "2rem", + { + "lineHeight": "2.5rem", + "letterSpacing": "-0.07rem", + }, + ], + "4xl": [ + "2.5rem", + { + "lineHeight": "3rem", + "letterSpacing": "-0.125rem", + }, + ], + "5xl": [ + "3rem", + { + "lineHeight": "3.5rem", + "letterSpacing": "-0.1575rem", + }, + ], + "6xl": [ + "3.5rem", + { + "lineHeight": "4rem", + "letterSpacing": "-0.1925rem", + }, + ], + }, "colors": { **radix_colors_dict, **custom_colors_dict, diff --git a/pcweb/templates/storypage.py b/pcweb/templates/storypage.py index 2d587977f..e79454a36 100644 --- a/pcweb/templates/storypage.py +++ b/pcweb/templates/storypage.py @@ -74,10 +74,13 @@ def company_card(company: str, founded: str, investors: str, url: str) -> rx.Com class_name="flex flex-col", ), # Investors - rx.box( - rx.text("Investors", class_name="text-slate-9 font-small-smbold"), - rx.text(investors, class_name="text-slate-12 font-base truncate"), - class_name="flex flex-col", + rx.cond( + investors, + rx.box( + rx.text("Investors", class_name="text-slate-9 font-small-smbold"), + rx.text(investors, class_name="text-slate-12 font-base truncate"), + class_name="flex flex-col", + ), ), class_name="flex-col gap-4 w-[13rem] p-8 rounded-[1.125rem] border border-slate-3 bg-slate-2 z-[1] justify-start absolute right-[-6.5rem] top-[12rem] hidden xl:flex", is_external=True,