Earn 54,000 ($540.00)
Personal CRM in Roam Research
Bounty Description
Personal CRM
API Docs
Roam API: https://roamresearch.com/#/app/developer-documentation/page/W4Po8pcHQ
Roam to JSON Webhooks Plugin: https://github.com/mlava/json-webhooks (install in Roam via the Roam plugin store in the app)
Google Calendar: https://developers.google.com/calendar/api/guides/overview
Apple Reminders: https://developer.apple.com/documentation/eventkit/creating_events_and_reminders
Apple Contacts: https://developer.apple.com/documentation/contacts
Objective:
Build a system inside Roam to maintain contact with people categorized into different lists based on their importance.
Requirements:
- Confirm if a page is for a person
- Query page
[[Bill Gates]]
for a block with attributeTags::
and tag#people
to know that this page is for a person in the Roam graph.
- Query page
- Contact Frequency: Allow users to set a contact cadence under attribute
Tags::
#A List
Very important people. Contact every two weeks.#B List
Important people. Contact every two months.#C List
Most people. Contact every six months.#D List
Demoted people. Contact once a year.- By default, add someone to
#C List
- Reminder System: Set up reminders for contacting individuals based on their categorization.
[[Bill Gates]]
has aContact Frequency
of#A List
.- Every 3 weeks, on a
Friday
, create a block on theDaily Note
calledReminder::
and underneath it nest a{{[[TODO]]}}
for each person to contact. Underneath each todo, include a nested query of their name and[[last time we talked]]
{{[[TODO]]}}
Contact[[Bill Gates]]
{{[[query]]: {and: [[Bill Gates]] [[last time we talked]]}}}
2. Birthdays
Objective:
Integrate birthday reminders in Roam.
Requirements:
- User
[[Bill Gates]]
tagged as#people
. He will have an attributeBirthday::
that will have his birthday stored in Roam’s date format as[[July 25th, 1997]]
. - If this person is on
#B List
or#A List
, 14 days before their birthday onJuly 11th, 2024,
nest under aReminder::
block on theDaily Note
for July 11, to say[[Bill Gates]]
turns 46 years old onJuly 25th, 2024
- If the person is on
#C List
or#D List
or not on any list, ignore.
3. Calendar to Block
Objective:
Automatically create template blocks in Roam Daily Note
for new events detected on Google Calendar.
Requirements:
-
Event Detection: Detect events on Google Calendar.
-
If the event is canceled, deleted or moved before the event happens, delete the block from Roam.
-
To detect an event, it has to have at least 2 people confirm RSVP. This way we avoid polluting the Roam graph where only 1 person has confirmed RSVP to an event.
-
Roam Integration: Insert a this templated call block on the day when the event happens
- [[Call]] with `[[Full Name]]` about `Event Bio`- Notes::-- Next Actions::
4. Apple Integration
Objective:
Sync information with Apple devices and services.
Requirements:
- 1 way sync with Apple Contacts: Integrate pages tagged as
#people
with Apple Contacts via a Cronjob that runs once a day- phone
- name
- address
- birthday
- Desktop Widget: Develop a Roam widget for Apple Desktop Notification Centre showing today's plans and priorities with a check-off feature.
- iOS Widget: Create an iOS widget displaying todos under today's Plans, Priorities, possibly through syncing with Apple Reminders.
5. Agenda Adder
Objective:
Automate the insertion of TODOs into relevant pages in a graph system.
Requirements:
- If I tag a name of a page like
#[[May Teo]]
(where the page contains#people
so we know it’s a person) anywhere in a graph in the same block as a{{[[TODO]]}}
, then automatically insert a block reference that todo May Teo page, indented under herAgenda::
block. Then the original place where the tag is, replace that with a block reference which points to the Agenda’s todo.
6. Done Filter
Objective:
Automatically filter out completed tasks.
Requirements:
- Automatic Filtering: Set pages containing
#people
to hide{{DONE}}
blocks via a filter. Roam does not allow this via UI if the page does not already have one block marked as DONE, so you might have to insert your own DONE block, and then trigger this filter.
7. Highlight CSS Modification
Objective:
Enhance visual aesthetics of the system.
Requirements:
- CSS Styling: Modify the highlight CSS styline in
roam/css
to mimic angled style, featuring angled edges. - https://pepelsbey.dev/articles/skewed-highlight/ (start angled, end angled)