Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
81bd1ac
feat: setup up project
frgfm Jul 7, 2025
4f9afa9
refactor: update package
frgfm Jul 7, 2025
7a20da0
docs(vscode): fix vscode settings
frgfm Jul 7, 2025
b19646a
refactor(cli): update commands
frgfm Jul 7, 2025
7ec0d89
fix(auth): fix permissions
frgfm Jul 7, 2025
9486e3c
ci(github): add docs and community helpers
frgfm Jul 8, 2025
c2ca828
docs(pyproject): update metadata
frgfm Jul 8, 2025
d4af567
build(pyproject): update deps and python version
frgfm Jul 8, 2025
74a4234
docs(contirbuting): update contributing and code of conduct
frgfm Jul 8, 2025
bab8278
docs(relay): add dynamic version
frgfm Jul 8, 2025
cab7749
feat(cli): clean auth and message list
frgfm Jul 8, 2025
1761db5
feat(cli): add message list
frgfm Jul 8, 2025
ef039f8
refactor(cli): clean up codebase
frgfm Jul 8, 2025
47e079a
build(deps-dev): bump ty
frgfm Jul 8, 2025
8d4b7c5
ci(scripts): fix deps checker
frgfm Jul 8, 2025
c3c3744
ci(engine): fix installer
frgfm Jul 8, 2025
b67c122
feat(cli): add read and search commands
frgfm Jul 8, 2025
dc0b7a0
feat(cli): add dev aliases to commands
frgfm Jul 8, 2025
774b529
docs(makefile): fix ty command
frgfm Jul 8, 2025
9c04d93
style: fix formatting
frgfm Jul 8, 2025
f6a2eb2
style: remove mypy ignores
frgfm Jul 8, 2025
28a5466
ci(deps-checker): remove mypy checks
frgfm Jul 8, 2025
b12ec95
docs(makefile): fix ty command
frgfm Jul 8, 2025
2a21697
docs(readme): improve readme
frgfm Jul 8, 2025
9474109
docs(readme): update logo
frgfm Jul 8, 2025
05668bf
refactor(cli): add proper aliases
frgfm Jul 8, 2025
f1c380a
refactor(cli): clean up tz management
frgfm Jul 8, 2025
ee31de5
docs(readme): update badge
frgfm Jul 8, 2025
7d6eb46
docs(docs): remove api reference
frgfm Jul 8, 2025
1fa6072
docs(docs): update legacy references
frgfm Jul 8, 2025
8d0d76d
docs(docs): finalize documentation
frgfm Jul 8, 2025
3ea032c
fix(cli): debug CLI
frgfm Jul 8, 2025
80dd43b
fix(imap): avoid wrong list reversal
frgfm Jul 8, 2025
24bd67a
fix(imap): fix imap ordering
frgfm Jul 8, 2025
80b4440
refactor(messages): clean up
frgfm Jul 8, 2025
7c97db4
style: fix lint
frgfm Jul 8, 2025
644f7ed
build(deps): clean versioning
frgfm Jul 9, 2025
196adbe
docs(makefile): add commands for build and publish
frgfm Jul 9, 2025
5563c9c
build(pyproject): fix index definition
frgfm Jul 9, 2025
d6d0a0f
docs(makefile): add build version setting
frgfm Jul 9, 2025
2cca263
ci(engine): add release jobs
frgfm Jul 9, 2025
bfaed4d
ci(engine): clean up release job
frgfm Jul 9, 2025
98781eb
style(ci): update config file
frgfm Jul 9, 2025
79cc38a
feat(cli): add shortcut args
frgfm Jul 9, 2025
2f6122a
feat(tests): add test suite
frgfm Jul 9, 2025
e318b4b
test(core): fix conftest
frgfm Jul 9, 2025
91fdd59
test(relay): add test utilities
frgfm Jul 9, 2025
203556c
ci(engine): add test coverage jobs
frgfm Jul 9, 2025
d880bb9
style: clean up
frgfm Jul 9, 2025
0718c63
refactor(imap): clean up imaplib interactions
frgfm Jul 9, 2025
5c9ec27
test(relay): add further tests
frgfm Jul 9, 2025
36af529
refactor: clean up codebase
frgfm Jul 9, 2025
1249595
style: clean up codebase
frgfm Jul 9, 2025
65dbb5a
style: clean up
frgfm Jul 9, 2025
35183f9
style: finalize cleanup
frgfm Jul 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions .cursor/rules/010-overview.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
---
description:
globs:
alwaysApply: true
---

# Project overview
This project's goal is to enable builders to create email-based apps

## Success metrics
- Reduction in time-to-zero-inbox for daily emails
- Number of active users of email apps

## Functional requirements
### General
- Stay lean, keep a minimal set of well-picked dependencies. The leanest codebase can lead to the greatest achievements
- Keep the codebase modular
- Respect Don't Repeat Yourself (DRY) rules

### Relay library
- Handle email account management (IMAP, Gmail, Outlook)
- Implements all common email operations that you can experience with email clients
- Credentials are stored locally
- The implementation should be optimized for speed and concept persistence

### Relay CLI
- Wrap the library in a CLI interface
- The UI should be designed so that it becomes easy for developers to manage their emails using their terminal

### Documentation
- Fast track the installation, usage and contribution of users

### Backend API
- Allow users to host online a REST API to develop email-based services
- Handle user authentication (OAuth 2 using JWT as bearer tokens)
- Handle OAuth connections (Google account)
- Enable the fetching and labeling of emails (metadata in relational database + image/video in storage)
19 changes: 19 additions & 0 deletions .cursor/rules/011-user-journeys.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
description:
globs:
alwaysApply: true
---

# User journeys

## User description
The users of this project are:
- professional developers experiencing vendor-locking with email solutions
- hobbyist and builders focused on prototyping multiple ideas quickly


## Journey description
- The user installs the CLI
- They connect their main email account, entering their credentials
- They fetch their first email
- They give the CLI documentation to their coding LLM to perform tasks on it
22 changes: 22 additions & 0 deletions .cursor/rules/012-key-concepts.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
description:
globs:
alwaysApply: true
---

# Key concepts

We need to keep the number of user-facing concepts to a minimum. Those concepts need to be persistent and in service of the product. Their core functions are:
- authentication and account management
- core email interactions
- make it easy & appealing for developers to build apps

Here are our main concepts:
- email server: a VM that can run email interactions through a specific set of possible protocols
- email provider: organization hosting email servers
- email account: a domain-bound address to send and receive emails
- email protocols: convention for interactions with an email account
- email client: a GUI for interactions with email accounts
- credentials: user-defined secrets that enable a connection to an email account
- message: a single e-mail (body + headers), defined by its Message-ID or IMAP UID.
- thread: all messages sharing References/In-Reply-To headers
30 changes: 30 additions & 0 deletions .cursor/rules/020-structure.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
---
description:
globs:
alwaysApply: true
---

# Codebase structure

The codebase includes several applications with separate tech stacks and folders: core library, and CLI.

- `.github/`: GitHub CI configuration
- `.cursor/rules`: rules for coding assistants
- `./relay`: core library for email management
- `./cli`: CLI for email management
- [Makefile](mdc:Makefile) high-level project commands
- [.pre-commit-config.yaml](mdc:.pre-commit-config.yaml): pre-commit configuration file
- [pyproject.toml](mdc:pyproject.toml): project configuration file

## Core library
The core library is a Python library + CLI for sync and async email operations, organized as follows:
- [client.py](mdc:relay/client.py): main entry point
- [config.py](mdc:relay/config.py): configuration management
- [exceptions.py](mdc:relay/exceptions.py): SDK-specific exceptions
- `models/`: data models (translatable to other languages)
- `providers/`: email provider implementations
- `gmail/`: Gmail connection
- `outlook/`: Outlook connection
- `imap/`: IMAP connection
- `smtp/`: SMTP connection
- `auth/`: authentication system (creds, oauth flow, secure storage)
27 changes: 27 additions & 0 deletions .cursor/rules/030-tech-stack.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
---
description:
globs:
alwaysApply: true
---

# Tech stack

This is a thorough description of technology choices for the project. We want to stay lean and avoid making project maintenance too complicated.

## General
- Makefile

## Backend API
- Python 3.11+
- Pydantic for model validation
- uv for dependency management
- ty for type checking
- ruff for code styling & format
- pytest as testing framework


## CLI
- Typer

## Documentation
- Mintlify
Loading