Initial boilerplate

This commit is contained in:
Robert Perce 2025-10-14 08:26:18 -05:00
commit 519fb49901
7 changed files with 4520 additions and 0 deletions

36
README.md Normal file
View file

@ -0,0 +1,36 @@
# 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