SocialWatch

Isn't is unfair how we have dashboards for everything but not for YOU? No longer. Now you can track your friendships like a true nerd.

This app fetches contacts from cardDAV, events from calDAV, combines them in a nice webUI and gives you an score calcuated from diversity of people you meet with and frequency.

It shows a bunch of metrics like:

  • Last Meetups: a chronological feed of past events
  • This Year: a GitHub-style heatmap of all social activity
  • Top Contacts: who you spend the most time with, ranked
  • Catch Up Soon: contacts you haven't seen in a while, sorted by time pased
  • Social Score: a 0-1 score combining event frequency and contact diversity
  • Number of Events in the current month

and its even mobile friendly!

API endpoints

Endpoint Description
GET /api/people List of contacts from the address book
GET /api/people/<person-uid> A contact by id
GET /api/people/<person-uid>/photo A contacs photo by id
GET /api/events List of calendar events with matched participants
GET /api/events/<event-uid> A calendar event by id
GET /api/scores Social score breakdown (total, event_score, diversity_score)
GET /api/parse_errors Calendar participants that couldn't be matched to a contact

Stack

  • Backend: Python with Flask (flask is awesome!)
  • Frontend: Vanilla HTML/CSS/JS
  • Data Base: all from CalDAV and CardDAV. No persistend data stored in the app!
  • config: in an simple .env file. Look at .env.example for reference
  • auth: none, you should use an SSO service like Authelia

Screenshots

Usage

  1. copy .env.example, rename it to .env and fill in all options (make sure URLs point to one specific calendar/addressbook, not a directory)
  2. copy docker-compose.yml and adjust if needed
  3. start the container
  4. in your contacts add whatever you've set for CARDDAV_IGNORE_STR to a contacts notes section to exclude them from the dashboard
  5. in your event calendar add all event participants in the description section, one per line, starting with CALDAV_PARTICIPANT_PREFIX
  6. optionally add the website to your homescreen to use it as an app on mobile

AI usage

I wrote the entire backend by hand. The frontend is 99% vibe coded. Sorry, code-purists.

S
Description
track your social relationships like a true nerd. Straight from your calDAV & cardDAV server
Readme
3.2 MiB
Languages
JavaScript 37.2%
Python 33.1%
CSS 21.7%
HTML 7.3%
Dockerfile 0.7%