After selfhosting dozens of applications myself I am looking forward to giving something back to the community. I wanted a way to manage both my professional and personal relationships better. Especially with kids around it feels difficult to keep up with everyone’s birthdays, diets, events and whatnot . Originally I used Monica but development has stalled since quite a while and the new version was a fair bit more complex than I needed. So over the last many months I built my own solution.

What it can do: You can add contacts (even with custom fields), relationships, reminders, activities and notes. Optionally you can also activate the CardDav server to sync contacts to and from your phone.

What it cannot do: There is no platform sync with LinkedIn/E-Mail/Messengers and there are no AI functionalities (neither is currently planned). As of now there is no native iOS/Android app, using the page on mobile works fine for me so far.

Development and use of AI: This app is not vibe coded. I do use AI assistants for programming support but code is either authored or reviewed by me (which is definitely required). I used golang for the backend (such a great language), the frontend is react. After a PR on github E2E tests are run, for each tag docker containers are built and available.

Demo and links: 
 You can try a demo here: https://meerkat-crm-demo.fly.dev/ (login with username demo and password test_12345). The demo starts on demand so it might take a couple seconds to load. Data is shared but resets as soon as the demo goes idle. 

 Repository: https://github.com/fbuchner/meerkat-crm (the README has a screengrab to give you an impression)

I am an avid user of the app myself and excited to open it up to the community now. Please be kind, I’ve been working on this for quite a while but it is my first open source project at this scale.

  • BromSwolligans@lemmy.world
    link
    fedilink
    English
    arrow-up
    6
    ·
    4 hours ago

    I think this is terrific. How much experience do you have programming, and what languages/frameworks did you use for this? I’m asking as a beginner who never knows where or how to really get started hobby programming, but really admires people who are out there doing cool shit.

    • silicea@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      3
      ·
      3 hours ago

      Some long backstory: I worked as a C# and AngularJS developer a long time ago but am now in a different profession. For this app I used go for the backend (with GORM as ORM) and react (with MUI for components) for the frontend. Go is what really brought me back to coding two years ago since it is a fun language and especially for hobby projects it feels clean and not overloaded. For the frontend I actually started with Vue.js but got frustrated with their state handling and discovered some bugs as well. Then I switched to Svelte wich seemed great if you build everything yourself but the existing component libraries still needed some work. In the end I landed at react. So in that repository I always had the same backend but did two rewrites for the frontend.

      From my personal experience I recommend focussing on the architecture and not to overengineer it. You likely do not need a full database at the start, instead sqlite might be enough. You probably can also live without a queue like Kafka or cache like Redis. And your frontend probably does not yet need Redux for state management or even Tailwind for styling. Of course you will have a little more pain when you want to add this later but at the same time your starting complexity reduces and it is easier to maintain the mental model of your application. Once you extend the functionality try to keep as much business logic as possible in the backend (so the frontend can stay “dumb” and focus on UI/UX). Always easier to test the backend. Pick a tech stack and stick with it, knowing your stack is more advantageous than having the perfect stack for every problem. And of course, just get started on something, the growth will happen along the way anyway.

  • M137@lemmy.world
    link
    fedilink
    English
    arrow-up
    5
    ·
    7 hours ago

    “Wow, you are really good at keeping in contact with people and focusing on relationships, what’s your secret?”

    “A meerkat helps me.”

  • nothingcorporate@lemmy.today
    link
    fedilink
    English
    arrow-up
    4
    ·
    edit-2
    7 hours ago

    This is literally exactly what I have always wanted, and there’s even install instructions and a sample docker-compose yaml. You’re the best at life. Thank you!

    EDIT: And there’s a built-in dark mode. YES!

    • silicea@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      5
      ·
      6 hours ago

      Thank you! If anything is unclear or missing feel free to message me or open a github issue. As the maintainer I sometimes can’t see the forest for the trees anymore :)

  • JensSpahnpasta@feddit.org
    link
    fedilink
    English
    arrow-up
    4
    ·
    7 hours ago

    How can someone get his data out of the system? I’m always hesitant to try software like these - I have been burned by software where it is easy to put in your data and hard or impossible to get out.

    • silicea@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      3
      ·
      edit-2
      7 hours ago

      There is an export button in the settings to export all data (aside from profile pictures) as CSV or export the contacts as VCF including profile pictures (but excluding activities and notes). Both of these methods allow for import into e.g. google contacts if you want to migrate away. In general all data is stored in an sqlite database on your file system as well as a folder for the profile photos.

      //Edit: To migrate data into meerkat there is also an import assistant in the contact list page that allows for VCF or CSV import

    • silicea@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      6
      ·
      6 hours ago

      Depends on your use-case. If you only want to store your contacts go for Thunderbird contacts or Baikal. Meerkat helps you when you want a more user-friendly way to organize everything around those contacts, like relationships between them, a timeline of activities and scheduling for reminders. I also started with a spreadsheet but at some point required something more sophisticated.

  • Aviator3912@lemmy.dbzer0.com
    link
    fedilink
    English
    arrow-up
    4
    ·
    13 hours ago

    Hey there - always on the lookout for a personal CRM here, and great to see a fresh entry next to Nametag and Monica.

    Are you thinking about including CalDAV support for birthdays, reminders, etc., or other notification methods than email (e.g., via a Telegram bot)?

    Can you share a bit more on what you currently see on the roadmap?

    • silicea@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      4
      ·
      6 hours ago

      Everything so far was built to scratch my own itch so now I want to build the roadmap based on what others need or want. CalDav definitely sounds sensible, OIDC is also on the roadmap as well as API token support. In a couple of days I plan to post a more structured roadmap and publish it on github.

  • Breezy@sopuli.xyz
    link
    fedilink
    English
    arrow-up
    31
    ·
    24 hours ago

    First, thank you for AI disclosure. Second, thank you for auto-filling the credentials for the demo. That small attention to detail is always a green-flag for me. I also had a great laugh at Rich’s timeline in the demo.

    There was actually another CRM-like self-hosted software that I had written down to check out called Nametag, but the last time I looked at it, it didn’t have CardDav support, so I wonder how this would compare.

    I am curious why you’ve exposed the backend port by default for the Docker Compose file. Is this for future external API access or just to ping the healthcheck thru something like Uptime Kuma? Why not just put both the frontend and backend in a network (I do already see the frontend having a depends_on dependency? I guess my assumption would be if the frontend is down, so would the back.

    But this looks really neat, thank you for sharing! The next time I get some free-time I’ll spin up a little test instance for a deeper dive.

    • silicea@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      12
      ·
      23 hours ago

      Thank you and do open a github issue if anything is not working as expected or the docs are unclear. I used expose in the docker compose file to help other developers understand the application better (expose itself is only for documentation, only ‘ports’ actually opens a port outside the internal network). Both containers also sit behind an nginx that acts as a single entry point. The /health endpoint exists currently only for docker healthcheck but I like your idea of exposing it through the frontend to allow for Uptime Kuma monitoring. I’ll implement that next.

      • Breezy@sopuli.xyz
        link
        fedilink
        English
        arrow-up
        7
        ·
        22 hours ago

        Omg, this is embarrassing, I just realized my dyslexia strikes again. I read that as ports and not expose. That’s nice, I rarely ever see that being used. Thank you for the explanation.

    • silicea@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      6
      ·
      13 hours ago

      There’s quite an overlap in functionality but differences in how it works in detail. Looking for example at reminders, Meerkat shows overdue reminders in the dashboard until you acknowledge them (email reminder goes out only once of course). Then the reminder can be marked done and get persisted into the timeline or you can skip it. You can also set reminders to reschedule from completion date (e.g. you have a weekly catchup, are behind for five days; then the reminder is rescheduled for in a week not for in two days). Or looking at profile photos you can also just copy the image address from e.g. a LinkedIn profile in pull it in via the dialogue without saving it locally on disk. There are many such differences, so best see what works better for you.

      • BromSwolligans@lemmy.world
        link
        fedilink
        English
        arrow-up
        4
        ·
        4 hours ago

        Does it have any emailing functionality? Like will a reminder come remind me through email, or is it only as valuable as I am checking it often?

        • silicea@lemmy.worldOP
          link
          fedilink
          English
          arrow-up
          3
          ·
          3 hours ago

          Currently it uses Resend (https://resend.com/) for email sending. You can add your resend token as env variable. The free plan allows for 3.000 mails per month, Meerkat would send you one mail a day at the specified time.