No description
Find a file
2026-04-08 09:59:05 -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 refactor: cloak elements that need alpine loaded 2026-04-08 09:59:05 -05:00
migrations feat: sane date format 2026-04-05 13:20:00 -05:00
src refactor: cloak elements that need alpine loaded 2026-04-08 09:59:05 -05:00
static refactor: cloak elements that need alpine loaded 2026-04-08 09:59:05 -05:00
.gitignore chore: gitkeep dbs folder 2026-04-03 13:56:06 -05:00
build.rs feat: report version information 2026-04-07 11:09:14 -05:00
Cargo.lock perf: large cache time on immutable hashed statics 2026-04-07 22:59:02 -05:00
Cargo.toml perf: large cache time on immutable hashed statics 2026-04-07 22:59:02 -05:00
CHANGELOG.md chore: prepare for tagged releases 2026-04-07 22:59:31 -05:00
cliff.toml perf(test): test performance improvements 2026-04-07 22:58:28 -05:00
mise.toml perf(test): test performance improvements 2026-04-07 22:58:28 -05:00
README.md docs: more README instructions 2026-04-04 23:05:13 -05:00
Taskfile chore: prepare for tagged releases 2026-04-07 22:59:31 -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