2025-10-14 08:26:18 -05:00
|
|
|
# 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".
|
|
|
|
|
|
2025-11-27 13:45:21 -06:00
|
|
|
## Current features
|
|
|
|
|
* In-app contacts
|
|
|
|
|
* For each contact:
|
|
|
|
|
* Names
|
|
|
|
|
* Birthday
|
|
|
|
|
* Last-contact-time mapping
|
2025-11-28 08:40:43 -06:00
|
|
|
* Address as single field (plus code? lat/long? go crazy!)
|
|
|
|
|
* Free-text-entry field
|
2026-04-04 22:59:39 -05:00
|
|
|
* Desired contact periodicity
|
2025-11-27 13:45:21 -06:00
|
|
|
* Journal with Obsidian-like `[[link]]` syntax
|
2026-04-04 22:59:39 -05:00
|
|
|
* Contact groups (e.g. "Met with `[[Brunch Bunch]]` at the diner")
|
2025-11-27 13:45:21 -06:00
|
|
|
* ical server for birthday reminders
|
2025-10-14 08:26:18 -05:00
|
|
|
|
2026-04-04 22:59:39 -05:00
|
|
|
## Explore
|
|
|
|
|
|
|
|
|
|
My instance is at https://crm.rperce.net. Username "demo" and password "demo" let
|
|
|
|
|
you log into an ephemeral demo user if you want to poke around.
|
|
|
|
|
|
|
|
|
|
If you want an account, contact me directly or use the "self-hosting" instructions below.
|
|
|
|
|
|
2025-11-27 13:45:21 -06:00
|
|
|
## Planned features
|
|
|
|
|
* Report birthdays and manage add'l fields for contacts stored on a remote CardDAV server
|
2025-10-14 08:26:18 -05:00
|
|
|
* Act as CardDAV server for other clients
|
|
|
|
|
* For each contact:
|
2025-11-27 13:45:21 -06:00
|
|
|
* Arbitrary add'l yearly dates (e.g. anniversaries) that show on calendar
|
2025-10-14 08:26:18 -05:00
|
|
|
* Relationship mapping
|
2025-11-27 13:45:21 -06:00
|
|
|
* Additional arbitrary fields (no special handling)
|
2025-10-14 08:26:18 -05:00
|
|
|
* "Named in journal but has no contact entry" detection
|
|
|
|
|
* Email birthday reminders over SMTP
|
2026-04-04 22:59:39 -05:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Development / self-hosting
|
|
|
|
|
|
|
|
|
|
1. Clone the repo.
|
|
|
|
|
2. Build for your system with `./Taskfile _cargo build --release`.
|
|
|
|
|
3. Deploy the binary from `./target/release/mascarpone` to wherever you want that's accessible to you.
|
|
|
|
|
4. In the working directory that you want the server to save its databases in,
|
|
|
|
|
1. Create a user for yourself with `mascarpone set-password YOUR_USERNAME`. This will create a `users.db` file.
|
|
|
|
|
2. Run `mkdir dbs`.
|
|
|
|
|
3. Copy the `hashed_static` directory from the code repository.
|
|
|
|
|
5. Run `mascarpone serve [port]` from that working directory. The default port is 3000.
|
|
|
|
|
If you need to be able to bind to a host other than `0.0.0.0`, contact me directly.
|
|
|
|
|
|
|
|
|
|
### Example systemd service file
|
|
|
|
|
```
|
|
|
|
|
[Unit]
|
|
|
|
|
Description=Mascarpone CRM
|
|
|
|
|
After=network.target
|
|
|
|
|
|
|
|
|
|
[Service]
|
|
|
|
|
Type=simple
|
|
|
|
|
WorkingDirectory=/var/local/mascarpone/
|
|
|
|
|
ExecStart=/usr/bin/mascarpone serve
|
|
|
|
|
Restart=on-failure
|
|
|
|
|
RestartSec=5
|
|
|
|
|
|
|
|
|
|
[Install]
|
|
|
|
|
WantedBy=multi-user.target
|
|
|
|
|
```
|