# 📊 AngelStat - The Portfolio CoPilot for Angel Investors

**URL:** <https://community.glideapps.com/t/angelstat-the-portfolio-copilot-for-angel-investors/76279>\
**Category:** Project Showcase\
**Created:** [September 11, 2024, 6:42am UTC](https://community.glideapps.com/t/angelstat-the-portfolio-copilot-for-angel-investors/76279 "2024-09-11T06:42:04Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![c0bbler](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/c0bbler/32/68741_2.png) [@c0bbler](https://community.glideapps.com/u/c0bbler)\
**Post date:** [September 11, 2024, 6:42am UTC](https://community.glideapps.com/t/angelstat-the-portfolio-copilot-for-angel-investors/76279/1 "2024-09-11T06:42:04Z")

</div>

Hi friends,

I’m sharing my project for the showcase, [AngelStat](https://angelstat.io/?utm_source=glide-project-showcase).

 ![screely-1724372371199](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/0/f/0f21ac2de3bba5275ee4d4c35e708bbccbec392f.jpeg)

AngelStat can be used by angel investors to track portfolio performance and metrics, particularly when they invest across platforms. Many angels invest directly in startups, or via platforms like AngelList and have to use a spreadsheet, Notion doc, or other means to track their portfolio performance and metrics. I built this tool after modeling my personal spreadsheet as a SaaS application, and I use it for all of my deal flow management and portfolio investments.

The app has a homepage hosted on Carrd which is very cheap and easy to maintain, and the app itself is hosted at a custom subdomain via Glide. I use some custom CSS for a few of the tab views along the top, and to customize the dashboard columns width to show more information. The app showcases a few ways to use Glide tables for lightweight data science, with more use cases I hope to add in the near future.

The app has paid components; I leverage a [Make.com](http://Make.com) scenario to listen to Stripe checkout events and make an API call to update the user to premium.

Things I wish existed for this (maybe others have solved, please share if so!):

- Some timestamp and webhook action attached to a new user row creation (eg., at signup)

Right now I have to poll the user table every 60 minutes in [make.com](http://make.com) and find new users to send welcome emails. I also have a custom action hidden in the first button interaction that also notifies me via email of a new user, but they have to click that button in order for this to fire.

- A smoother Stripe integration that supports monetization of applications

I hacked together this polling mechanism in [make.com](http://make.com), it works but something officially supported would be great.

- subfolder domain hosting

This app has thousands of companies stored in the database, each with enriched company profiles and information. I’d love to host the app via a subfolder instead of subdomain, primarily because I could build a large SEO presence with that data. Unfortunately, Glide doesn’t support this. An alternative is that I move my home/landing page hosting to Glide, but it changes how users can interact with various parts of the application. I am thinking about this quite a bit and how to solve, including deploying separate apps and having tab buttons link out to them somehow. This part is very annoying and may make me move to other hosting in the future depending on user feedback and potential value of this data as it grows.

- The ability to restrict some components with a blur view

I think I can do this with custom CSS, but I need to read whether or not the user is paid or not. Not 100% clear how to do this right now, but it gives the app a more professional approach by showing users the power and potential of a paid plan (my app is super cheap), and entices upgrade. If you know how to put a blur overlay and an upgrade button on top of certain components that is interesting. I will do some CSS work to see if I can make it happen.

Probably more things I cannot remember right now.

Please ask questions, test drive the app if you’re so inclined, and give me feedback!

Cheers and thanks to the community for so many solutions and help!

---

<div class="post-metadata">

**Author:** ![ThinhDinh](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/thinhdinh/32/49_2.png) [@ThinhDinh](https://community.glideapps.com/u/ThinhDinh)\
**Post date:** [September 11, 2024, 2:55pm UTC](https://community.glideapps.com/t/angelstat-the-portfolio-copilot-for-angel-investors/76279/2 "2024-09-11T14:55:22Z")

</div>

> [@c0bbler](#):
>
> Things I wish existed for this (maybe others have solved, please share if so!):
> 
> - Some timestamp and webhook action attached to a new user row creation (eg., at signup)
> 
> Right now I have to poll the user table every 60 minutes in [make.com](http://make.com) and find new users to send welcome emails. I also have a custom action hidden in the first button interaction that also notifies me via email of a new user, but they have to click that button in order for this to fire.

I think if you have an onboarding flow, you can build this into the action(s) that the user has to trigger at the end of onboarding.

> [@c0bbler](#):
>
> I think I can do this with custom CSS, but I need to read whether or not the user is paid or not. Not 100% clear how to do this right now, but it gives the app a more professional approach by showing users the power and potential of a paid plan (my app is super cheap), and entices upgrade. If you know how to put a blur overlay and an upgrade button on top of certain components that is interesting. I will do some CSS work to see if I can make it happen.

If you can add a helper component to the related view and give it a custom class, you can then blur the original component if only the helper component exists. Hide it when the user is premium, for example.

---

<div class="post-metadata">

**Author:** ![c0bbler](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/c0bbler/32/68741_2.png) [@c0bbler](https://community.glideapps.com/u/c0bbler)\
**Post date:** [September 11, 2024, 4:42pm UTC](https://community.glideapps.com/t/angelstat-the-portfolio-copilot-for-angel-investors/76279/3 "2024-09-11T16:42:43Z")

</div>

Thanks for your reply and general help to everyone here!

> [@ThinhDinh](#):
>
> I think if you have an onboarding flow, you can build this into the action(s) that the user has to trigger at the end of onboarding.

You can’t really do this reliably though, which is my chief complaint. The app has an onboarding flow, but some users will churn before they ever get started. Because those users have taken no action to onboard themselves, you can’t take any action on them unless you poll the user table for new rows. Something like a webhook trigger or even a simple date/time stamp on the user row for when that row would added would be more powerful than what exists now.

Another use case for this is a trial period. I can 100% offer my users a trial in Stripe, but that’s only if they commit well enough to look into paying (the steepest conversion step in a funnel). If I have a timestamp for when that row was added exposed in the db, I can give them a trial that automatically counts up to some interval (15 days for example), and then blocks the paid features until upgrade. Very hard to do this right now.

> [@ThinhDinh](#):
>
> If you can add a helper component to the related view and give it a custom class, you can then blur the original component if only the helper component exists. Hide it when the user is premium, for example.

I will try this, it is along the lines of what I was thinking. I was also thinking to add a blur component and use CSS to overlay them, and only show the blur component if the user’s paid status is false (unchecked).

thanks again!

---

<div class="post-metadata">

**Author:** ![ThinhDinh](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/thinhdinh/32/49_2.png) [@ThinhDinh](https://community.glideapps.com/u/ThinhDinh)\
**Post date:** [September 11, 2024, 11:49pm UTC](https://community.glideapps.com/t/angelstat-the-portfolio-copilot-for-angel-investors/76279/4 "2024-09-11T23:49:47Z")

</div>

> [@c0bbler](#):
>
> You can’t really do this reliably though, which is my chief complaint. The app has an onboarding flow, but some users will churn before they ever get started. Because those users have taken no action to onboard themselves, you can’t take any action on them unless you poll the user table for new rows. Something like a webhook trigger or even a simple date/time stamp on the user row for when that row would added would be more powerful than what exists now.

If you care about churning users, maybe a scheduled workflow will be what you need (e.g: running every hour, for users who doesn’t have a “welcome email sent” timestamp). Glide is working on something like that.

For timestamp when the row is added, I believe that’s very useful, but not something I have heard Glide working on.

> [@c0bbler](#):
>
> I will try this, it is along the lines of what I was thinking. I was also thinking to add a blur component and use CSS to overlay them, and only show the blur component if the user’s paid status is false (unchecked).

To be more specific, it would use [:has](https://css-tricks.com/the-css-has-selector/).

---

<div class="post-metadata">

**Author:** ![c0bbler](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/c0bbler/32/68741_2.png) [@c0bbler](https://community.glideapps.com/u/c0bbler)\
**Post date:** [September 12, 2024, 5:21am UTC](https://community.glideapps.com/t/angelstat-the-portfolio-copilot-for-angel-investors/76279/5 "2024-09-12T05:21:32Z")

</div>

> [@ThinhDinh](#):
>
> To be more specific, it would use [:has](https://css-tricks.com/the-css-has-selector/).

Very helpful, thanks again.

For future readers visiting this thread, another aspect I would like to see is app analytics. I would like to see user usage patterns and behaviors, I believe I would need to instrument all flows manually with custom actions firing API calls to some events service, but I need to look into it more. If there was an Amplitude or similar integration that could be really helpful.

---

<div class="post-metadata">

**Author:** ![ThinhDinh](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/thinhdinh/32/49_2.png) [@ThinhDinh](https://community.glideapps.com/u/ThinhDinh)\
**Post date:** [September 12, 2024, 12:44pm UTC](https://community.glideapps.com/t/angelstat-the-portfolio-copilot-for-angel-investors/76279/6 "2024-09-12T12:44:19Z")

</div>

> **[Google Analytics | Glide Docs](https://www.glideapps.com/docs/google-analytics)**
>
> Learn how to integrate Google Analytics with your apps.

I have never used it, but we have Google Analytics.

---

<div class="post-metadata">

**Author:** ![c0bbler](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/c0bbler/32/68741_2.png) [@c0bbler](https://community.glideapps.com/u/c0bbler)\
**Post date:** [September 13, 2024, 3:19am UTC](https://community.glideapps.com/t/angelstat-the-portfolio-copilot-for-angel-investors/76279/7 "2024-09-13T03:19:20Z")

</div>

Yes, I am playing with custom events. Google Analytics is a bit cumbersome with this but I will see what I can do with it.

---

<div class="post-metadata">

**Author:** ![c0bbler](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/c0bbler/32/68741_2.png) [@c0bbler](https://community.glideapps.com/u/c0bbler)\
**Post date:** [September 27, 2024, 9:04pm UTC](https://community.glideapps.com/t/angelstat-the-portfolio-copilot-for-angel-investors/76279/8 "2024-09-27T21:04:32Z")

</div>

Update: I realized we have a Mixpanel integration available, and their free tier is very useful at 2M events, so I am working on integration analytics into custom actions within my app. Will update accordingly when I have a few things figured out.
