Giter Site home page Giter Site logo

monicahq / chandler Goto Github PK

View Code? Open in Web Editor NEW
268.0 10.0 12.0 12.37 MB

The upcoming brand new version of Monica. Not suitable for production use at the moment.

License: GNU Affero General Public License v3.0

Shell 0.18% PHP 74.68% Vue 24.94% Blade 0.05% PLpgSQL 0.01% Dockerfile 0.14%

chandler's Introduction

Monica's Logo

Document your life

Docker pulls Lines of code Code coverage License

Docs - Bug report

Monica is an open source personal relationship management system, that lets you document your life.

Note

This branch is the beta version of Monica. If you want to browse the stable and current version, use the main branch instead.

Table of contents

Introduction

Monica is an open-source web application that enables you to document your life, organize, and log your interactions with your family and friends. We call it a PRM, or Personal Relationship Management. Imagine a CRM—a commonly used tool by sales teams in the corporate world—for your friends and family.

Features

  • Add and manage contacts
  • Define relationships between contacts
  • Reminders
  • Automatic reminders for birthdays
  • Ability to add notes to a contact
  • Ability to record how you met someone
  • Management of activities with a contact
  • Management of tasks
  • Management of addresses and all the different ways to contact someone
  • Management of contact field types
  • Management of a contact’s pets
  • Top of the art diary to keep track of what’s happening in your life
  • Ability to record how your day went
  • Upload documents and photos
  • Ability to define custom genders
  • Ability to define custom activity types
  • Ability to favorite contacts
  • Multiple vaults and users
  • Labels to organize contacts
  • Ability to define what section should appear on the contact sheet
  • Multiple currencies
  • Translated in 27 languages

Who is it for?

This project is for people who want to document their lives and those who have difficulty remembering details about the lives of people they care about.

We've also had a lot of positive reviews from people with Asperger syndrome, Alzheimer's disease, and introverts who use our app every day.

What Monica isn’t

  • Monica is not a social network and it never will be. It’s not meant to be social. It’s designed to be the opposite: it’s for your eyes only.
  • Monica is not a smart assistant. It won’t guess what you want to do. It’s actually pretty dumb: it will only send you emails for the things you asked to be reminded of.
  • Monica does not have built-in AI with integrations like ChatGPT.
  • Monica is not a tool that will scan your data and do nasty things with it. It’s your data, your server, do whatever you want with it. You’re in control of your data.

Contribute

Do you want to lend a hand? That's great! We accept contributions from everyone, regardless of form.

Here are some of the things you can do to help.

Contribute as a community

  • Unlike Fight Club, the best way to help is to actually talk about Monica as much as you can in blog posts and articles, or on social media.

  • You can answer questions in the issue tracker to help other community members.

  • You can financially support Monica’s development on Patreon or by subscribing to a paid account.

Contribute as a developer

Principles, vision, goals and strategy

We want to use technology in a way that does not harm human relationships, unlike big social networks.

Principles

Monica has a few principles.

  • It should help improve relationships.

  • It should be simple to use, simple to contribute to, simple to understand, extremely simple to maintain.

  • It is not a social network and never will be.

  • It is not and never will be ad-supported.

  • Users are not and never will be tracked.

  • It should be transparent.

  • It should be open-source.

  • It should do one thing (documenting your life) extremely well, and nothing more.

  • It should be well documented.

Vision

Monica’s vision is to help people have more meaningful relationships.

Goals

We want to provide a platform that is:

  • really easy to use: we value simplicity over anything else.

  • open-source: we believe everyone should be able to contribute to this tool, and see for themselves that nothing nasty is done behind the scenes that would go against the best interests of the users. We also want to leverage the community to build attractive features and do things that would not be possible otherwise.

  • easy to contribute to: we want to keep the codebase as simple as possible. This has two big advantages: anyone can contribute, and it’s easily maintainable on the long run.

  • available everywhere: Monica should be able to run on any desktop OS or mobile phone easily. This will be made possible by making sure the tool is easily installable by anyone who wants to either contribute or host the platform themselves.

Why Open Source?

Why is Monica open source? Is it risky? Could someone steal my code and use it to start a for-profit business that could hurt my own? Why reveal our strategy to the world? We've already received these kinds of questions in our emails.

The answer is simple: yes, you can fork Monica and create a competing project, make money from it (even if the license is not ideal for that) and we won't be aware. But that's okay, we don't mind.

We wanted to open source Monica for several reasons:

  • We believe that this tool can really change people’s lives. We aim to make money from this project, but also want everyone to benefit. Open sourcing it will help Monica become much bigger than we imagine. We believe the software should follow our vision, but we must be humble enough to recognize that ideas come from everywhere and people may have better ideas than us.

  • You can’t make something great alone. While Monica could become a company and hire a bunch of super smart people to work on it, you can’t beat the manpower of an entire community. Open sourcing the product means bugs will be fixed faster, features will be developed faster, and more importantly, developers will be able to contribute to a tool that positively changes their own lives and the lives of other people.

  • Doing things in a transparent way leads to formidable things. People respect the project more when they can see how it’s being worked on. You can’t hide nasty things in the code. You can’t do things behind the backs of your users. Doing everything in the open is a major driving force that motivates you to keep doing what’s right.

  • Once you’ve created a community of passionate developers around your project, you’ve won. Developers are powerful influencers: they create apps, discuss your product on forums, and share it with their networks. Nurture your relationship with developers – users will follow.

Patreon

You can support the development of Monica on Patreon. Thanks for your help.

Contact

Team

Our team is made of two core members:

We are also fortunate to have an amazing community of developers who help us greatly.

Thank you, open source

Monica makes use of numerous open-source projects and we are deeply grateful. We hope that by offering Monica as a free, open-source project, we can help others in the same way these programs have helped us.

License

Copyright © 2016–2023

Licensed under the AGPL License.

chandler's People

Contributors

akn101 avatar asbiin avatar dependabot[bot] avatar depfu[bot] avatar djaiss avatar imgbot[bot] avatar julian-louis avatar mishagp avatar njelich avatar stylecibot avatar szepeviktor avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chandler's Issues

NotificationChannels\Telegram\Exceptions\CouldNotSendNotification: Telegram responded with an error `400 - Bad Request: chat not found`

Sentry Issue: STAGING-APP-6

GuzzleHttp\Exception\ClientException: Client error: `POST https://api.telegram.org/bot393828013:AAEae8whNPAHi2EIyRmssVY51XQqsV7o_3M/sendMessage` resulted in a `400 Bad Request` response:
{"ok":false,"error_code":400,"description":"Bad Request: chat not found"}

  File "/app/Domains/Contact/ManageReminders/Jobs/ProcessScheduledContactReminders.php", line 50, in App\Domains\Contact\ManageReminders\Jobs\ProcessScheduledContactReminders::handle
    ->notify(new ReminderTriggered($channel, $contactReminder->label, $contactName));
  File "/artisan", line 37
    new Symfony\Component\Console\Output\ConsoleOutput
...
(53 additional frame(s) were not displayed)

NotificationChannels\Telegram\Exceptions\CouldNotSendNotification: Telegram responded with an error `400 - Bad Request: chat not found`
  File "/app/Domains/Contact/ManageReminders/Jobs/ProcessScheduledContactReminders.php", line 50, in App\Domains\Contact\ManageReminders\Jobs\ProcessScheduledContactReminders::handle
    ->notify(new ReminderTriggered($channel, $contactReminder->label, $contactName));
  File "/artisan", line 37
    new Symfony\Component\Console\Output\ConsoleOutput
...
(42 additional frame(s) were not displayed)

feat: Interests, Preferences

Forgive me, this sort of thing is very loosely defined. The Activity feature in Monica was excellent for remembering past events. Sometimes though, I want to track something a bit less concrete.

For instance: John tells me he loves playing hockey. How do I record that so next time I meet up with him I say something about it? I feel like notes are too freeform and activities too constrained.

That begs the question of "How deep should it go". Lets say I specifically know John loves the Montreal Canadiens. Is that a better fit for notes or "Interests"?

Could tie nicely with #341. Who do I know who likes "Hockey"?

Todo

Hard things remaining to do:

  • get rid of logs entirely. the system is clunky.
  • better newsfeed
  • notion of couple
  • notion of family
  • relationships
  • reminders by email and telegram

Feature parity / services

  • Manage account
  • Manage contact
  • Gender
  • Me as a contact
  • Place
  • Pets
  • Pronouns
  • Labels
  • Favorites
  • Navigate to labels
  • Mark contact as deceased
  • Reminders
  • Address type (work, chalet, home, ...)
  • Multiple addresses per contact
  • Ways to contact (telephone, etc...) (contact fields and contact field types)
  • Debts
  • Birthday
  • How you met
  • Work information
  • Export as vCard
  • Archive contact
  • Notes
    • Dedicated page for notes
  • Gifts
    • Gift occasions
    • Gift stages
  • Documents
  • Photos
  • Avatar
  • Emotions
  • Conversations
  • Stay in touch
  • Calls audio/video
  • Last called widget
  • Activities
  • Life events
  • 2FA
  • Tasks

New features

  • Reports
    • list of most/least contacted contacts
  • ability to customize contact page
    • contact information
    • all other data
    • change template
  • Maiden name
  • Audit logs
  • Contact logs
  • Group
    • group details page
  • communication (log email received)
  • Family summary module
  • Vault: give/change/remove permission to user
  • Vault settings:
    • change default template
    • delete vault
    • manage users
  • Journal
    • list of journals
    • edit/delete journal
    • list of posts
    • write/edit a post
    • view post
    • search post content
    • search post title
    • contacts in the post
    • category
    • time periods
  • Goals
    • list goals
    • display goal details
    • delete goal
    • edit goal
  • Contact feed
  • indicate feelings between contacts (hate, love, etc...)
  • instance administrator panel
  • religion
  • race
  • disability
  • 5 minutes journal (https://www.intelligentchange.com/products/the-five-minute-journal)
  • daily planner
  • weekly meal planner
  • mood tracker
  • export templates as yml
  • "on this week last year" reports
  • send a report every sunday of what's coming next week

out of scope for now

  • Try the product without signing up
  • Weather
  • Dark mode
  • events

Docker Image

Is a docker-image available for this version or could someone provide it on hub.docker.com ?

Symfony\Component\Mailer\Exception\TransportException: Expected response code "250" but got empty code.

Sentry Issue: STAGING-APP-7

Symfony\Component\Mailer\Exception\TransportException: Expected response code "250" but got empty code.
  File "/app/Domains/Contact/ManageReminders/Jobs/ProcessScheduledContactReminders.php", line 50, in App\Domains\Contact\ManageReminders\Jobs\ProcessScheduledContactReminders::handle
    ->notify(new ReminderTriggered($channel, $contactReminder->label, $contactName));
  File "/artisan", line 37
    new Symfony\Component\Console\Output\ConsoleOutput
...
(47 additional frame(s) were not displayed)

Prefix/suffix support

I'm a new user and only briefly played around with Monica in part because of its lack of prefix/suffix support. I'm a Jr and so it was a blocker not to have my own name be correct. I set up Chandler via Docker and poked around all the options but this still seems to be missing. Is this a planned feature?

P.S. The new version is looking fantastic!

Bug: Unexpected behavior when clicking a name in autocomplete dropdown

  1. Go to Add a relationship for a contact
  2. Select Choose an existing contact
  3. Start typing the name of an existing contact
  4. Click on the name to autocomplete

Expected: Select the name in the dropdown.

Actual: Navigates to that contact's page.

It seems the expectation is that users click the Add button next to the name but that wasn't immediately obvious. Navigating away from the page after clicking made me think that the operation was successful when it wasn't. I acknowledge this might be preference but wanted to call it out as unexpected.

Browser: Safari

Add support for the DAV suite of protocols

In Monica 1, you could:

  • Sync contacts using CardDAV
  • Sync calendar using CalDAV

I would like this feature to also be included in Chandler, I assume it might already be on the roadmap but I haven't seen it.
It would also be nice to add WebDAV support for browsing files 👀

PS : Thanks for all the work, Monica has helped me greatly and Chandler is really great !

Configuration option for TrustProxies

First of all, thank you for your tireless efforts on the current and upcoming versions of Monica! ❤️

I found out about this development repo for the upcoming major version and wanted to try it out immediately. I spun up a similar setup to my existing self-hosted Monica instance and ran into the following issue:
The generated URLs in the Vue app, for example to JS assets, but also to links, use the http scheme instead of https. I use a reverse proxy in front of the docker container to terminates SSL and therefore, the browsers blocks loading of these generated non-https URLs. The APP_URL is set to https://mydomain.tld and I could resolve the asset case by setting ASSET_URL to the same value. However, links were still not working.

Finally, I tracked down what I believe to be the underlying issue: According to the documentation of Ziggy, it takes Laravel's TrustProxies configuration into account and generates non-http URLs if no reverse proxy is detected.

I found that the current version of Monica has a configuration option for this feature but this version does not.

I'm happy to open a PR if you have the capacity for that right now. Else, feel free to close the issue if you think this should wait until later.

Feature Idea: more entity types (pets, addresses, etc.)

While entering pet information I thought it would be nice if my wife and I could have the same pet entity rather than typing it in free-text twice. Then I thought it would be cool if we could store their birthdays, notes about pet toys, etc. as if they were their own contacts.

Same for addresses and the like - then they could be exposed, clicked on, and you could see everyone living at that address, etc. and also save time entering it multiple times.

Can not select existing contact for relationships

fresh pull with docker image ghcr.io/monicahq/monica-next:main
Steps:
created contact for my wife.
add relationship
selected spouse
selected Choose existing contact, filled in my name no results.

Went to my contact
add relationship
selected spouse
selected Choose existing contact, filled in her name no result

From logs:
[01/Mar/2023:16:27:41 +0000] "GET /vaults/1/contacts/1/tabs/social HTTP/1.1" 200 20741 "http://192.168.1.121:4545/vaults/1/contacts/1/tabs/life-goals" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0"
[01/Mar/2023:16:27:48 +0000] "GET /vaults/1/contacts/1/relationships/create HTTP/1.1" 200 10300 "http://192.168.1.121:4545/vaults/1/contacts/1/tabs/social" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0"
[2023-03-01 16:28:02] production.ERROR: This database engine does not support fulltext search operations. {"userId":1,"exception":"[object] (RuntimeException(code: 0): This database engine does not support fulltext search operations. at /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php:706)
[01/Mar/2023:16:28:02 +0000] "POST /vaults/1/search/user/contacts HTTP/1.1" 500 1575 "http://192.168.1.121:4545/vaults/1/contacts/1/relationships/create" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0"

Contacts table from database.sqlite
1|9895a95d-3116-48e4-a5ef-9c38ac15c550|1|||1||John||Smith||||||0|1|||||2023-03-01 15:46:30|2023-03-01 15:46:30||
2|9895b67a-6684-4100-ae96-d31723a48dc7|1|||1||Jane||Smith||Doe||||1|1|||2023-03-01 16:23:10||2023-03-01 16:23:10|2023-03-01 16:23:10||

Bug: possibly missing migration in latest build

I tried adding a new contact and am getting this error. I tried running php artisan migrate in the container and there was nothing to do.

Image: ghcr.io/monicahq/monica-next:main@sha256:aa4872bfe2d58a26c056be9554b3924f9d01fa3bb8ced526e5a4714f0face474 after pulling the latest.

[previous exception] [object] (PDOException(code: 42S22): SQLSTATE[42S22]: Column not found: 1054 Unknown column 'suffix' in 'field list' at /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php:539)
�
[stacktrace]
#0 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php(539): PDO->prepare('insert into `co...')
#1 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php(753): Illuminate\\Database\\Connection->Illuminate\\Database\\{closure}('insert into `co...', Array)
#2 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php(720): Illuminate\\Database\\Connection->runQueryCallback('insert into `co...', Array, Object(Closure))
#3 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php(546): Illuminate\\Database\\Connection->run('insert into `co...', Array, Object(Closure))
#4 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php(498): Illuminate\\Database\\Connection->statement('insert into `co...', Array)
#5 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/Processor.php(32): Illuminate\\Database\\Connection->insert('insert into `co...', Array)
#6 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3266): Illuminate\\Database\\Query\\Processors\\Processor->processInsertGetId(Object(Illuminate\\Database\\Query\\Builder), 'insert into `co...', Array, 'id')
#7 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(1861): Illuminate\\Database\\Query\\Builder->insertGetId(Array, 'id')
#8 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1322): Illuminate\\Database\\Eloquent\\Builder->__call('insertGetId', Array)
#9 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1287): Illuminate\\Database\\Eloquent\\Model->insertAndSetId(Object(Illuminate\\Database\\Eloquent\\Builder), Array)
#10 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1128): Illuminate\\Database\\Eloquent\\Model->performInsert(Object(Illuminate\\Database\\Eloquent\\Builder))
#11 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(978): Illuminate\\Database\\Eloquent\\Model->save()
#12 /var/www/html/vendor/laravel/framework/src/Illuminate/Support/helpers.php(306): Illuminate\\Database\\Eloquent\\Builder->Illuminate\\Database\\Eloquent\\{closure}(Object(App\\Models\\Contact))
#13 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(979): tap(Object(App\\Models\\Contact), Object(Closure))
#14 /var/www/html/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php(23): Illuminate\\Database\\Eloquent\\Builder->create(Array)
#15 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(2321): Illuminate\\Database\\Eloquent\\Model->forwardCallTo(Object(Illuminate\\Database\\Eloquent\\Builder), 'create', Array)
#16 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(2333): Illuminate\\Database\\Eloquent\\Model->__call('create', Array)
#17 /var/www/html/app/Domains/Contact/ManageContact/Services/CreateContact.php(115): Illuminate\\Database\\Eloquent\\Model::__callStatic('create', Array)
#18 /var/www/html/app/Domains/Contact/ManageContact/Services/CreateContact.php(66): App\\Domains\\Contact\\ManageContact\\Services\\CreateContact->createContact()
#19 /var/www/html/app/Domains/Contact/ManageContact/Web/Controllers/ContactController.php(69): App\\Domains\\Contact\\ManageContact\\Services\\CreateContact->execute(Array)
#20 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\\Domains\\Contact\\ManageContact\\Web\\Controllers\\ContactController->store(Object(Illuminate\\Http\\Request), 1)
#21 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction('store', Array)
#22 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(260): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(App\\Domains\\Contact\\ManageContact\\Web\\Controllers\\ContactController), 'store')
#23 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
#24 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(725): Illuminate\\Routing\\Route->run()
#25 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#26 /var/www/html/app/Http/Middleware/CheckVaultPermissionAtLeastEditor.php(31): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\\Http\\Middleware\\CheckVaultPermissionAtLeastEditor->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /var/www/html/app/Http/Middleware/CheckVaultAccess.php(30): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\\Http\\Middleware\\CheckVaultAccess->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/EnsureEmailIsVerified.php(30): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#31 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Auth\\Middleware\\EnsureEmailIsVerified->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#32 /var/www/html/app/Http/Middleware/CheckLocale.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#33 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\\Http\\Middleware\\CheckLocale->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 /var/www/html/vendor/inertiajs/inertia-laravel/src/Middleware.php(92): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Inertia\\Middleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#36 /var/www/html/vendor/laravel/jetstream/src/Http/Middleware/ShareInertiaData.php(66): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#37 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Laravel\\Jetstream\\Http\\Middleware\\ShareInertiaData->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#38 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#39 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#40 /var/www/html/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#41 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Session\\Middleware\\AuthenticateSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#42 /var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(44): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#43 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Auth\\Middleware\\Authenticate->handle(Object(Illuminate\\Http\\Request), Object(Closure), 'sanctum')
#44 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#45 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#46 /var/www/html/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#47 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#48 /var/www/html/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#49 /var/www/html/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest(Object(Illuminate\\Http\\Request), Object(Illuminate\\Session\\Store), Object(Closure))
#50 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#51 /var/www/html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#52 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#53 /var/www/html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#54 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#55 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#56 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(726): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#57 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(703): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#58 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(667): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#59 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(656): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#60 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(190): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#61 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#62 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#63 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#64 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#65 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#66 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#67 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#68 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#69 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#70 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#71 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#72 /var/www/html/vendor/fruitcake/laravel-cors/src/HandleCors.php(38): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#73 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Fruitcake\\Cors\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#74 /var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#75 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Http\\Middleware\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#76 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#77 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(165): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#78 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(134): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#79 /var/www/html/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#80 {main}
"} 
172.19.0.12 - - [22/Dec/2022:10:40:38 -0800] "POST /vaults/1/contacts HTTP/1.1" 500 1205 "https://paul.contacts.berruti.family/vaults/1/contacts/create" "Mozilla/5.0 (iPhone; CPU iPhone OS 16_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Mobile/15E148 Safari/604.1"
172.19.0.12 - - [22/Dec/2022:10:40:40 -0800] "GET /vaults/1/contacts/create HTTP/1.1" 200 12963 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 16_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Mobile/15E148 Safari/604.1"

Design file?

Is there any Figma or similar design file where we can collaborate on design choices?

Progressive Web App support

On iOS you can add sites to the desktop in Safari. With proper support it will show up with the website's icon and open in its own window as if it were an app.

The toaster component no longer works and needs to be replaced

We used to have a toaster that displayed success messages. It broke somehow and now it doesn't work anymore.

It's located in Toaster.vue.

There are two ways of calling it:

  • either by putting a message in the local storage, like localStorage.success = 'The contact has been edited'; and then it appears on next page load
  • or call the toaster directly with this.flash('The call reason type has been created', 'success');.

I have no idea why it doesn't work anymore. We either need to replace it, or make the current one work.

Customize display names based on condition

You can already customise display names using a string of text, but I think you should be able to change the display name format based on a condition.

Now, I'm thinking you could link a display name to a user template.
For example, for close friends & family, I usually want their format to be %first_name% %last_name%, whereas for online friends, I'd usually go with %nickname% (%first_name% %last_name%)

Summary to prepare a call to someone

It would be great to have a way of having a summary of a contact before calling this contact.

The idea is to feed yourself with topics of discussion that always occur when calling someone.

This summary would list, in a very digestable way, :

  • basic family summary (current spouse, and/or children, and/or pets)
  • current job occupation
  • latest life events, if any

BUG: Cannot login again after logging out

After registering for an account, if I log out I cannot log back in, instead I get the following error.

Screen Shot 2022-11-02 at 16 46 27

If I then go to register again using the same credentials it says the credentials are already taken.

Screen Shot 2022-11-02 at 16 46 56

Import from monica classic?

I was looking at this and it seems awesome! Will we be able to easily import from the original monica? And, is this ready for use? I'd love to get an instance up and running.

Error: Attempt to assign property "content" on null

Sentry Issue: STAGING-APP-8

Error: Attempt to assign property "content" on null
  File "/app/Domains/Settings/ManageNotificationChannels/Web/Controllers/TelegramWebhookController.php", line 47, in App\Domains\Settings\ManageNotificationChannels\Web\Controllers\TelegramWebhookController::store
    $channel->content = $chatId;
  File "/app/Http/Middleware/CheckLocale.php", line 39, in App\Http\Middleware\CheckLocale::handle
    return $next($request);
  File "/public/index.php", line 52
    $request = Request::capture()
...
(55 additional frame(s) were not displayed)

We should be able to @ mention someone in the Textarea

Right now we can't use the @ mention in a textarea.

The textarea component should have the ability to let us @ mention someone, through the component API.

We should be able to indicate a new props accept-mention or something. Once it's set to true, we should be able to call the backend when we @ and load the list of proper contacts.

Then once we select the contact, we should emit something to let the UI know that we've selected someone.

Add nickname history

I often find myself wanting to know what the old username of an online friend was using monica, but I usually overwrite them as they change, I think that a "username history" view would be a nice addition !

PWA Support

In the previous version, a major issue was cross platform compatibility and the extra work around efforts such as maintaining a mobile app - a crucial part of the experience.

PWAs have grown a lot as a concept, and there are loads of packages enabling easy conversion for Laravel based apps.

Are there any plans to go in that direction?

Don't use this in production - only for testing purposes

If you read this, chances are that you are testing Chandler either locally or online.

Please keep in mind that we are in the development phase. Things are still unstable.

While we are not at the production level ready, we are continuously changing the database schema, as it's way easier to change the schema than to modify it once it's live.

For instance, in the next weeks, I'll completely refactor how we handle the concept of adresses. We could migrate the current structure but honestly it'll take much more time than rewriting it from scratch. The drawback: you'll need to flush your data in your DB for Chandler to work again.

Cannot save address if Location IQ is not set up

I tried adding an address without having Location IQ set up and received an error:

172.19.0.12 - - [11/Dec/2022:14:03:34 -0800] "POST /vaults/1/contacts/1/addresses HTTP/1.1" 500 1205 "https://paul.contacts.berruti.family/vaults/1/contacts/1/tabs/ways-to-connect" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Safari/605.1.15" [2022-12-11 22:04:19] production.ERROR: Env variables are not set for Location IQ {"userId":1,"exception":"[object] (App\\Exceptions\\EnvVariablesNotSetException(code: 0): Env variables are not set for Location IQ at /var/www/html/app/Domains/Contact/ManageContactAddresses/Services/GetGPSCoordinate.php:89)

I can provide a whole call stack but I imagine this is by design during development. If you don't want these kinds of bug reports just yet I'm happy to hold off but wanted to help if it's useful!

[Bug] - Family Summary - Inconsistent

The Family Summary shows an inconsistent view.

Phillip is listed as Jim's Son under the Social tab, but not in the Family Summary
image

Pam has Jim listed as Husband, and Phillip & Cecelia as children under Social but only Jim under Family Summary
image

Phillip has Pam & Jim listed as Parents under Social and no one under Family Summary
image

Cecelia has Jim & Pam listed as Parents, and Phillip listed as Brother under Social and only Jim listed under Family Summary
image

Main docker image revision:a71b14ce977754d6df80d46a98ea5b36b6d46d1d

Templating for contact protocols

Currently, monica only supports prefix text.

as such, if the data is world and the protocol is hello:, then the final URI will be hello:world.
what I'd like is a templating engine, where you could do https://somesite.com/%id%/profile

in the example of Discord, it would be something like : https://discord.com/users/%id%/profile.
i have already needed that for another website, but I don't remember what it was.

[Bug] - 'Love' relationship not shown in second contact's 'Family summary' section

Loving the new Monica so far!
I'm building a test vault with the goal of contributing to the documentation.
If this is already known or not required, please discard.

Using the latest docker image, tagged as revision 99eac7722038a845234e7f933fc6f3078020801b
When adding relationships to contacts, if you define a 'love' relationship with another contact, the second contact does not inherit the same relationship link in the 'Family summary' area.
image
image

Docker Setup using `log` mailer (some gotchas)

Hey guys!

Setting up Docker locally had some unexpected gotchas, so I'd like to just leave a few tips for those new to the flow. This guide continues from the "docker installed, image builds and runs okay point" - meaning you've successfully ran the following commands:

docker build -t monica-next -f scripts/docker/Dockerfile .

docker run --name monica-p 8080:80 -e MAIL_MAILER=log monica-next

Registration

After this point you'll be faced with the login screen, where you have to register.

Screen Shot 2022-10-31 at 10 38 44

Screen Shot 2022-10-31 at 10 39 07

Mail verification

Great, you filled out the registration info and got to the verification mail stage. So where do you find the verification mail?

In my case it is delivered to the Docker Desktop log handler - so open up Docker desktop, pick Containers from the nav bar on the left and click on your monica container.

Screen Shot 2022-10-31 at 11 07 13

Here you can see part of the raw mail HTML being sent to the log mailer. The part containing the verification URL is obfuscated - however, we have = at the end of each line and a few other bits we need to remove before this works fine.

http://localh= ost:8080/email/verify/2/4b8e02cde907e88a3f481928de3e3cc6ca61686c?expires=3D= 1667212743&signature=3Dd545eebd0f5fdff467acb06d2ed4e29f6dd0e255e66c9ffb= 1274fb01a2dcda1a

To clean this up we need to remove the = that were added as line ends, remove the newlines that are unnecessary, replace & with & and (this is a tricky one) remove the 3D after signature= and expires=.

Then we can copy the raw verification url and paste it into the browser to actually get into the app.

http://localhost:8080/email/verify/2/4b8e02cde907e88a3f481928de3e3cc6ca61686c?expires=1667212743&signature=d545eebd0f5fdff467acb06d2ed4e29f6dd0e255e66c9ffb1274fb01a2dcda1a

Congrats, now you have a basic development/usage loop using a locally built docker container.

NOTE: I'll hopefully write a docker-sync setup for development without rebuilding the container soon, making contributing without setting up your local system possible

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.