36 lines
1.3 KiB
Markdown
36 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
|
|
|