Project Info
This project did not submit a demo video on Devpost.
Inspiration
We wanted to make regular, mundane tasks better organized than the systems provided because a lot of the times, you feel like you've missed important emails because they came up in a miscategorized within your email. Also, constantly manually filtering each email into a preferred category can get annoying after a while.
What it does
The app looks at your most recent emails and categorizes them into categories of your choosing -- you can edit the category names whenever!
How we built it
We connected the Gmail API to CockroachDB and connected to Intel to categorize emails with MindsDB. Then, we coded the front end on Reflex.
Challenges we ran into
Balancing the expectation for being able to write Pythonic code in Reflex and the shortcomings of what converts it into JavaScript on the front end. And that means we have to modify our logic to be more JavaScript-y in a Pythonic environment. Another issue we ran into was considering the scalability of the application, such as processing multiple requests at the same time.
Accomplishments we're proud of
Managed to connect so many things together!
What we learned
How expectations from using previous technologies bias or inform our use of new technologies.
What's next
We'd love to expand the platform further, streamline it, and increase the capability of handling multiple users.
bubblify
A web application to automatically cluster emails into customized bubbles.
Welcome to Reflex!
This is the base Reflex template - installed when you run reflex init.
If you want to use a different template, pass the --template flag to reflex init.
For example, if you want a more basic starting point, you can run:
reflex init --template blank
About this Template
This template has the following directory structure:
├── README.md
├── assets
├── rxconfig.py
└── {your_app}
├── __init__.py
├── components
│ ├── __init__.py
│ └── sidebar.py
├── pages
│ ├── __init__.py
│ ├── dashboard.py
│ ├── index.py
│ └── settings.py
├── state.py
├── styles.py
├── templates
│ ├── __init__.py
│ └── template.py
└── {your_app}.py
See the Project Structure docs for more information on general Reflex project structure.
Adding Pages
In this template, the pages in your app are defined in {your_app}/pages/.
Each page is a function that returns a Reflex component.
For example, to edit this page you can modify {your_app}/pages/index.py.
See the pages docs for more information on pages.
In this template, instead of using rx.add_page or the @rx.page decorator,
we use the @template decorator from {your_app}/templates/template.py.
To add a new page:
- Add a new file in
{your_app}/pages/. We recommend using one file per page, but you can also group pages in a single file. - Add a new function with the
@templatedecorator, which takes the same arguments as@rx.page. - Import the page in your
{your_app}/pages/__init__.pyfile and it will automatically be added to the app.
Adding Components
In order to keep your code organized, we recommend putting components that are
used across multiple pages in the {your_app}/components/ directory.
In this template, we have a sidebar component in {your_app}/components/sidebar.py.
Adding State
In this template, we define the base state of the app in {your_app}/state.py.
The base state is useful for general app state that is used across multiple pages.
In this template, the base state handles the toggle for the sidebar.
As your app grows, we recommend using substates to organize your state. You can either define substates in their own files, or if the state is specific to a page, you can define it in the page file itself.
Analysis
View
Metric
- 18
- 17
- 10
- 1
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- FastAPIIn code
- PostgreSQLIn code
- PythonIn code
- RedisIn code
- LangChainClaimed
- OpenAIClaimed
4 of 6 appear in the indexed code. 2 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
51 KB
Source files
23
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
Joshtray/bubblify
36 files · 71 KB · @ a285479
Structure
Interface
11 files · 31%Screens, components and styles rendered to the user.
Application logic
13 files · 36%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- Python95%
- Markdown5%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
requirements.txt
pypi · 72- alembic
- anyio
- async-timeout
- bidict
- cachetools
- certifi
- charset-normalizer
- click
- cloudpickle
- distro
- exceptiongroup
- fastapi
- google-api-core
- google-api-python-client
- google-auth
- google-auth-httplib2
- google-auth-oauthlib
- googleapis-common-protos
- +54 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.