Giter Site home page Giter Site logo

intri-in / manage-my-damn-life-nextjs Goto Github PK

View Code? Open in Web Editor NEW
147.0 3.0 8.0 13.85 MB

Manage My Damn Life (MMDL) is a self-hosted front end for managing your CalDAV tasks and calendars.

Home Page: https://intri.in/manage-my-damn-life/

License: GNU General Public License v3.0

JavaScript 86.40% TypeScript 11.37% CSS 1.28% Dockerfile 0.06% Shell 0.01% HTML 0.88%
caldav caldav-client calendar task-manager taskmanager tasks calendar-view self-hosted selfhosted

manage-my-damn-life-nextjs's Introduction

Introduction

Manage my Damn Life (MMDL) is a self hosted front end for managing your CalDAV tasks and calendars.

This project is in beta state, so be careful if you're working with production data.

Demo Task View Home GanttView

More screenshots are available in the directory '/docs/pics/screenshots'

Features

  1. Manage your CalDAV tasks.
    • Supports sub tasks.
    • Supports many fields like due, status, description, recurrence, and more
  2. Manage calendar events.
  3. Supports multiple CalDAV accounts, and multiple user accounts.
  4. View your tasks as a list, in a gantt view, or on a calendar.
  5. Create and manage task filters to view your tasks as you see fit.
  6. "Reponsive-ish" view. This is a desktop first project, as multiple clients like JTX Boards, OpenTasks exist for mobile.
  7. OAUTH support

Planned features

  1. Support all fields for VTODO and VEVENT as described in RFC 5545.
  2. More flexible ways to view tasks, and customisable views.
  3. Drag and drop capability for tasks
  4. Ability to create external plugins.

Compatibility

This client has been tested with Nextcloud and Baikal.

As of now, it only supports basic authentication, and not OAUTH.

Getting Started

To get started, you can checkout full documentation here.

manage-my-damn-life-nextjs's People

Contributors

aa-tree avatar intri-in avatar mrminede 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

manage-my-damn-life-nextjs's Issues

Pre-filled event

Status should be confirmed by default.

Alarms should have presets 1, 5, 15, 30, 45min, 1, 2, 3, 6, 12h, 1d...

Also All Day Event should be one day long for default. Now Edit Event view show it like two day, but in calendar it looks to be one day. And if same day is selected for From and To it goes bananas.

Task Alarm Reset on Save

I'm using JTX-Board to create Tasks on my phone.
In this app I have the ability to set alarms for my tasks:

When I edit this Task in MMDL and save:

The Alarm is removed:

When Saving a Task in MMDL it should not overwrite other Properties of the Task

Invalid date error on some but not all tasks

Hi, having a weird bug with Due Dates pulled from a Tasks.org CalDAV calendar.

image

It seems that some of the entries are affected but not all... please let me know what kind of data/logs I can provide for troubleshooting.

Issue parsing JSON response from Radicale

I was having an issue logging into radicale, but have fixed that. Now, i'm getting a JSON parsing error. Based on the radicale logs, it looks like login is successful.

MMDL Error
Screenshot_20240212_220321_Mull.jpg

MMDL Log

10:24:44 PM
Executing (default): SELECT `caldav_accounts_id`, `username`, `password`, `url`, `userid`, `name`, `authMethod` FROM `caldav_accounts` AS `caldav_accounts` WHERE `caldav_accounts`.`username` = 'test' AND `caldav_accounts`.`url` = 'http://192.168.100.88:5232/' LIMIT 1;
10:24:44 PM
res null
10:24:44 PM
TypeError: Cannot read properties of undefined (reading 'words')

Radicale Log

03:15:08 AM
[2024-02-12 22:15:08 -0500] [7/Thread-24 (process_request_thread)] [DEBUG] 'test' has write access to collection 'test'
03:15:08 AM
[2024-02-12 22:15:08 -0500] [7/Thread-24 (process_request_thread)] [DEBUG] Response content:
03:15:08 AM
<?xml version="1.0"?>
03:15:08 AM
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:CS="http://calendarserver.org/ns/" xmlns:ICAL="http://apple.com/ns/ical/">
03:15:08 AM
  <response>
03:15:08 AM
    <href>/test/</href>
03:15:08 AM
    <propstat>
03:15:08 AM
      <prop>
03:15:08 AM
        <C:calendar-description />
03:15:08 AM
        <C:calendar-timezone />
03:15:08 AM
        <displayname />
03:15:08 AM
        <ICAL:calendar-color />
03:15:08 AM
        <CS:getctag />
03:15:08 AM
        <C:supported-calendar-component-set />
03:15:08 AM
        <sync-token />
03:15:08 AM
      </prop>
03:15:08 AM
      <status>HTTP/1.1 404 Not Found</status>
03:15:08 AM
    </propstat>
03:15:08 AM
    <propstat>
03:15:08 AM
      <prop>
03:15:08 AM
        <resourcetype>
03:15:08 AM
          <principal />
03:15:08 AM
          <collection />
03:15:08 AM
        </resourcetype>
03:15:08 AM
      </prop>
03:15:08 AM
      <status>HTTP/1.1 200 OK</status>
03:15:08 AM
    </propstat>
03:15:08 AM
  </response>
03:15:08 AM
</multistatus>
03:15:08 AM
03:15:08 AM
[2024-02-12 22:15:08 -0500] [7/Thread-24 (process_request_thread)] [INFO] PROPFIND response status for '/test/' with depth '1' in 0.182 seconds: 207 Multi-Status

Show list of calendars

Let's assume I have plenty of calendars with different colors which I do not remember. I would like to have quick summary of colors somewhere.

At least Select Calendars to Show list should show them, but maybe sticky side panel with calendars and colors would be nice also.

Time format is not consistent

In calendar time is shown in 12h format and in Edit Event view in 24h format. In Month view it is shown with am/pm, but in Week view only with time.

Also it would be good to have 12h/24h format selector in settings. And date format too.

And timezone selector would be nice.

Support for alternative database backends/dialects

Just registering my interest for supporting database backends other than MySQL (namely PostgreSQL, but perhaps SQLite would be useful to others) -- everything on my home server currently works with PostgreSQL so I'd rather not be setting up an additional database provider for a single app.

I can see 2674832 which notes the addition of a generic SQL library, but I don't know if any further progress was made there.

client does not support authentication protocol requested by server, consider upgrading mysql client

the mysql docker image is unpinned so I'm not sure if this is related.

Error connecting to database. Check your database settings. Here's some more information:

{"code":"ER_NOT_SUPPORTED_AUTH_MODE","errno":1251,"sqlMessage":"Client does not support authentication protocol requested by server; consider upgrading MySQL client","sqlState":"08004","fatal":true}
  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    expose: 
      - 3306
    networks:
      - app-tier
    environment:

DB tables doesn't exist

Should tables created automatically?

I installed MMDL using Docker Compose and these can be found from DB log:

2024-01-15 03:17:36+00:00 [Note] [Entrypoint]: Creating database sample_install_mmdm
2024-01-15 03:17:36+00:00 [Note] [Entrypoint]: Creating user myuser
2024-01-15 03:17:36+00:00 [Note] [Entrypoint]: Giving user myuser access to schema sample_install_mmdm

And these from MMDL itself:

Error: Table 'sample_install_mmdm.settings' doesn't exist
Error: Table 'sample_install_mmdm.users' doesn't exist

Do I need to create these manually?

Error when adding Vikunja as CalDav source

Hi !
First of all, thank you so much for making this. I have been looking at a way of managing tasks and calendar in the same place for a long time.

I was testing your app and could add my selfhosted Nextcloud account without problems. However, when trying to add Vikunja (https://vikunja.io/) I get the following errors: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

Word wrap if there is space

Now there is lot of unused space in Month view, but event summary is cut in one line lenght.

And maybe add ... if text is cut.

Events from Radicale are not showing up

Hey there,

I installed MMDL via docker-compose and set everything up. I've connected my caldav Account, hosted on Radicale and then my Tasks showed up. Everything's great. But what's missing though are my Events. I've set up a couple events with the OneCalendar App for Android and when I download my ics file, I can see those events in my outlook calendar, but they don't show up in the MMDL calendar. When I create an event through the in MMDL in shows up everywhere: MMDL as well as my phone calendar.

If you need access to my ics file, you can contact me privately via my email [email protected]

Docker image

Hello.

Your project looks really appealing.

Is there a docker image coming anytime soon ?

Cheers :)

not populating tasks from Radicale server calendars

Setup Steps:

  1. I have successfully installed mmdl following the install docs and connected to a mysql database.
  2. The /install/ url indicated good database settings, and the install button was successful and populated the database with new tables.
  3. It took me to a new user page, and creating a user was successful.
  4. Next I added my CalDAV server (Radicale v3). This authorized successfully and pulled in my 2 calendars. Looking at the sql database, the urls to the calendars are correct.

However, I do not see any tasks.

When I click the refresh button, the console reports:

=====================
[]
=====================

I am able to create a new task in either of the calendars, and see it in both the mmdl interface as well as my Radicale calDAV server. This new task also appears in the mobile calDAV client I use, Tasks.org.

=====================
/api/caldav/calendars/add/event
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Manage my Damn Life Tasks v0.1
BEGIN:VTODO
UID: 49dc56103f5f1d6a828ec4be1d17771e1041d53d30b0cce6ad8f70c7c2c4ef85
DTSTAMP:20230428T140804
SUMMARY:test
STATUS:NEEDS-ACTION
PERCENT-COMPLETE:0
PRIORITY:1
DESCRIPTION: Sdfd
LAST-MODIFIED:20230428T140804
END:VTODO
END:VCALENDAR
=====================

It appears pushing tasks to the server works fine, but it cannot find the existing tasks.

Thanks a lot, I am enjoying this tool

Self Signed Certificates are rejected automatically

Self-signed certificates are automatically rejected by the program.
It would be nice to make this a warning rather than an error.
Basically, give the user the chance to decide if they really want to connect or not, as is sometimes intended.

CalDAV registry user inputs MUST be processed

The Issue

I was having an issue where I was trying to connect to my radicle CalDAV server but got an error: Invalid credentials
Meanwhile the same credentials where working on other devices using other apps. This nearly drove me insane but I figured out that the CalDav credentials are actually send as an http-GET request to the backend in plain text.

GET http://mmdl-ip:3000/api/v2/caldav/register?url=http://radicle-ip:5232&=&=&=&username=my_clean_text_username&password=my_clean_text_password&accountname=test

My password contained a & sign which caused my password to look some what like this:

GET http://mmdl-ip:3000/api/v2/caldav/register?url=http://radicle-ip:5232&=&=&=&username=my_clean_text_username&password=my_clean&text_password=&accountname=test

As you can see only the first part of my password was actually being used as the password. The second part is being used as a name for an extra variable, which isn't defined.

Possible solution

The easiest solution to this, I can think of is scanning the user input for characters that might cause problems and replacing them with their respective escape character. This is how I manually solved this issue for now. So instead of using pass&word I used pass%26word.

Another fix that I think would work (I'm not an expert at this) would be using a POST request instead of a GET request.

Finally I want to say that this might be a security risk. Again I'm not an expert but trusting raw user input is rarely a good idea.

Possible issue with docker installation

          I just tried to set this up today, and I'm getting an error on the install page.
manage-my-damn-life-nextjs-app-1  | Error: 'sharp' is required to be installed in standalone mode for the image optimization to function correctly. Read more at: https://nextjs.org/docs/messages/sharp-missing-in-production

Originally posted by @AeliusSaionji in #12 (comment)

Quick Add flashes window

At least with Firefox when ! mark is clicked it show Quick Add info pop-up which opens and closes again and again.

webhook - notification - gotify

Would it be possible to alert or send a notification to a service like gotify when an event in the calendar occurs? may have to still use a Mobile app for this, but an idea worth asking.

Possible enhancements

Hello.

I've been playing with mmdl and it's been great.
My main goal was to ditch google cal. Of course the competition is harsh, but if you need some ideas of improvement, I made a list, in no specific order:

  • #23
  • #26
  • #32
  • #31
  • Choose a color per event not bound to calendar color.
  • #47
  • The month view should maybe fill the screen by default without having to scroll to reach the last day of the month.
  • Possibility to create templates.
  • Possibility to copy an event one time or multiple times to specific dates.
  • Possibility to choose to display 24h instead of a or p.
  • [BUG] Some items seem to be randomly duplicated from time to time. It comes and goes.
  • #36
  • Possibility to share calendar (read only) publicly or with private url to non-registered users.

Thank you for your work. It's great to have an alternative :)

Unable to use docker image

I'm getting the following error when using the docker image

"Error connecting to database. Check your database settings. Here's some more information:

{"code":"ER_ACCESS_DENIED_ERROR","errno":1045,"sqlState":"28000","sqlMessage":"Access denied for user 'mmdm_user'@'172.22.0.3' (using password: YES)"}"

I'm not sure why this error is occuring, considering that mmdm_user is not the user specified in the docker compose file or the .env file I'm using...

image

My docker compose is follows:

version: "2.6"
services:
  app:
    container_name: mmdl_app
    image: intriin/mmdl:latest
    ports:
      - 3001:3000
    depends_on:
      - db
    networks:
      - web
      - internal
    restart: unless-stopped
    environment:
      DB_HOST: db
#    env_file:
#      - .env.local
    extra_hosts:
    - "host.docker.internal:host-gateway"
  db:
    container_name: mmdl_db
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    ports:
      - 3306
    networks:
#      - web
      - internal
    environment:
    ############################################################
    ## The following variables NEED to be set before execution.
    ############################################################
      #DB_NAME and MYSQL_DATABASE must be the same.
      MYSQL_DATABASE: mmdl
      # This is the user name and password of your mysql user that will be created. These values must be used in DB_USER and DB_PASS variables in the .env file that you will create.
      MYSQL_USER: mmdl
      MYSQL_PASSWORD: password
      # This defines the root password of mysql in the container. You can use the root user too. 
      MYSQL_ROOT_PASSWORD: password
    ############################################################
    ## The following variables are advanced settings,
    ## and must be only changed in case you're trying something
    ## specific.
    ############################################################
#      MYSQL_ALLOW_EMPTY_PASSWORD: ok
#      MYSQL_ROOT_HOST: '%'
    volumes:
      - ./mysql:/var/lib/mysql

networks:
  web:
    external: true
  internal:
    external: false

Keep month view on one page

Now on screen/resolution wide enough scrolling is needed to see full month.

Individual days are HUGE and it does not even help, because events are still one liners with small font:

2024-04-11 00_30_18-MMDL - Tasks — LibreWolf

Quick view for event

Now when I like to see e.g. event description, I have to open Edit Event view. It would be beneficial to quickly see summary of event. Mouse over or click summary pop-up.

"All day event" selector memory

When changing time scheduled event to all day event and back again it does not remember what those time was even event was not changed/saved.

Also when selecting from date/time then to date/time should be automatically changed if it is before from time.

calendar not showing recurring tasks or task length correctly

made a recurring event in Etar, synced with dav5x, to baikal, longer than the standard hour.

displays in MMDL as only an hour on mondays?

Screenshot 2024-04-09 at 9 01 39 PM

(unrelated but 30 minute events display as an hour?)

Is there something I've done wrong with the other dav apps or something so it's not recognized by MMDL?

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.