No description
Find a file
2026-04-05 13:20:00 -05:00
.forgejo/workflows refactor: break up web/contact 2026-02-01 21:56:20 -06:00
dbs chore: gitkeep dbs folder 2026-04-03 13:56:06 -05:00
e2e spec: show birthdays until a week out 2026-04-05 13:18:59 -05:00
migrations feat: sane date format 2026-04-05 13:20:00 -05:00
src feat: sane date format 2026-04-05 13:20:00 -05:00
static feat: inactive contacts hidden in sidebar 2026-04-03 16:03:16 -05:00
.gitignore chore: gitkeep dbs folder 2026-04-03 13:56:06 -05:00
build.rs hash statics 2025-12-01 15:23:56 -06:00
Cargo.lock refactor: switch from chrono to jiff 2026-04-03 11:54:36 -05:00
Cargo.toml refactor: switch from chrono to jiff 2026-04-03 11:54:36 -05:00
mise.toml add pnpm setup 2025-12-01 22:39:18 -06:00
README.md docs: more README instructions 2026-04-04 23:05:13 -05:00
Taskfile fix: manually-freshened-at date overwritten 2026-04-04 22:47:23 -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".

Current features

  • In-app contacts
  • For each contact:
    • Names
    • Birthday
    • Last-contact-time mapping
    • Address as single field (plus code? lat/long? go crazy!)
    • Free-text-entry field
    • Desired contact periodicity
  • Journal with Obsidian-like [[link]] syntax
  • Contact groups (e.g. "Met with [[Brunch Bunch]] at the diner")
  • ical server for birthday reminders

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.

Planned features

  • Report birthdays and manage add'l fields for contacts stored on a remote CardDAV server
  • Act as CardDAV server for other clients
  • For each contact:
    • Arbitrary add'l yearly dates (e.g. anniversaries) that show on calendar
    • Relationship mapping
    • Additional arbitrary fields (no special handling)
  • "Named in journal but has no contact entry" detection
  • Email birthday reminders over SMTP

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 in PATH (or use it from here if you want)
  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