37 lines
1.3 KiB
Markdown
37 lines
1.3 KiB
Markdown
|
|
# Mascarpone CRM
|
||
|
|
|
||
|
|
I always write "cream cheese" on my grocery list as "crm chs", so that's what
|
||
|
|
I think of when I see "CRM".
|
||
|
|
|
||
|
|
## Planned Features
|
||
|
|
|
||
|
|
* Local contacts
|
||
|
|
* Contacts stored on a remote CardDAV server
|
||
|
|
* Act as CardDAV server for other clients
|
||
|
|
* For each contact:
|
||
|
|
* Name, address as single fields (plus code? lat/long? go crazy!)
|
||
|
|
* Relationship mapping
|
||
|
|
* Birthday reminders
|
||
|
|
* Desired contact periodicity
|
||
|
|
* Last-contact-time mapping
|
||
|
|
* Additional arbitrary fields
|
||
|
|
* Journal with Obsidian-like `[[link]]` syntax
|
||
|
|
* Contact groups (e.g. "Met with `[[Brunch Bunch]]` at the diner")
|
||
|
|
* "Named in journal but has no contact entry" detection
|
||
|
|
* CalDAV server for birthday reminders
|
||
|
|
* Email birthday reminders over SMTP
|
||
|
|
|
||
|
|
## Tech
|
||
|
|
|
||
|
|
axum: fast and scalable, lots of middleware from tower
|
||
|
|
axum-htmx: helpers when dealing with htmx headers
|
||
|
|
axum-login: user auth, has oauth2 and user permissions
|
||
|
|
tower-sessions: save user sessions (Redis, sqlite, memory, etc.)
|
||
|
|
fred: Redis client for user sessions
|
||
|
|
tracing: trace and instrument async logs
|
||
|
|
reqwest: for API calls, oath2
|
||
|
|
anyhow: turn any error into an AppError returning: “Internal Server Error”
|
||
|
|
maud: templating html, can split fragments into functions in a single file (LoB)
|
||
|
|
sqlx: dealing with a database, migrations, reverts
|
||
|
|
|