GithubHelp home page GithubHelp logo

kennethwussmann / zeitraum Goto Github PK

View Code? Open in Web Editor NEW
6.0 6.0 0.0 7.95 MB

Time tracking with tags integrated in your workflow

License: MIT License

TypeScript 83.28% Dockerfile 0.63% JavaScript 0.40% Go 15.68%
automation cli graphql rest-api timetracking

zeitraum's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

zeitraum's Issues

Time span presets

WHY

I noticed that multiple tags are combined to express a specific activity. It sometimes takes effort to remember the exact combination.

For example: life, cleaning, bathroom

In such a case, a quick activity could be lovely, which bundles multiple tags and a note together. Like a time span preset.

Example preset:

Name: Cleaning Bathroom
Tags: life, cleaning
Note: Bathroom

WHAT

  • Add the ability to persist TimeSpanPreset. They hold an array of tags, an optional note, and a display name.
  • Allow list, update and deletion of TimeSpanPresets.
  • Add additional mutation that can track time spans based on presets.
    • This could be an additional parameter on the current mutation for time span creation, not sure.
    • The preset is referenced by it's UUID for creation, but they are not linked together on a database level. Data from the preset is instead copied into the new time span.

Publish TypeDoc and Redoc to GH pages

Currently, it's required to start a server, so SOFA generates the OpenAPI spec on the fly. But that's rather inconvenient to just check the API. There is still the GraphQL schema one can just look at but some still prefer REST.

Also for @zeitraum/client it could be helpful to have the TypeDoc online.

Build when the tag is published and upload to GH Pages.

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Ignored or Blocked

These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.

Detected dependencies

docker-compose
docker-compose.yml
  • postgres 15
  • prom/prometheus v2.43.0
dockerfile
Dockerfile
  • node 18-slim
  • node 18-slim
github-actions
.github/actions/docker-publish/action.yml
  • docker/login-action v2
  • docker/build-push-action v4
.github/actions/npm-install/action.yml
  • actions/setup-node v3
.github/workflows/build.yml
  • actions/checkout v3
.github/workflows/dependencies.yml
  • actions/checkout v3
  • peter-evans/create-pull-request v5
.github/workflows/release-cli.yml
  • actions/checkout v3
  • wangyoucao577/go-release-action v1.38
.github/workflows/release-docker-develop.yml
  • actions/checkout v3
.github/workflows/release-docker-latest.yml
  • actions/checkout v3
.github/workflows/release-npm.yml
  • actions/checkout v3
  • changesets/action v1
gomod
packages/cli/go.mod
  • go 1.20
npm
package.json
  • @changesets/cli ^2.26.1
  • @moia-oss/eslint-prettier-typescript-config 0.11.45
  • @types/jest ^29.5.1
  • @types/node 18.*
  • @typescript-eslint/eslint-plugin ^5.59.1
  • @typescript-eslint/parser ^5.59.1
  • @vercel/ncc ^0.36.1
  • eslint ^8.39.0
  • eslint-plugin-jest ^27.2.1
  • eslint-plugin-monorepo ^0.3.2
  • husky ^8.0.3
  • jest ^29.5.0
  • jest-mock-extended ^3.0.4
  • lint-staged ^13
  • npm-check-updates ^16.10.9
  • prettier ^2.8.8
  • ts-jest ^29.1.0
  • tsx ^3.12.7
  • turbo ^1.9.3
  • typescript 4.*
  • zx ^7.2.1
  • node 18
  • npm 9
packages/cli/package.json
packages/client/package.json
  • cross-fetch ^3.1.5
  • @graphql-codegen/add ^4.0.1
  • @graphql-codegen/cli ^3.3.1
  • @graphql-codegen/typescript ^3.0.4
  • @graphql-codegen/typescript-generic-sdk ^3.1.0
  • @graphql-codegen/typescript-operations ^3.0.4
  • @graphql-codegen/typescript-resolvers ^3.2.1
packages/commons/package.json
  • winston ^3.8.2
  • winston-daily-rotate-file ^4.7.1
  • zod ^3.21.4
packages/server/package.json
  • @apollo/server ^4.7.0
  • @graphql-tools/graphql-file-loader ^7.5.17
  • @graphql-tools/load ^7.8.14
  • @graphql-tools/merge ^8.4.1
  • @prisma/client ^4.13.0
  • dotenv ^16.0.3
  • express ^4.18.2
  • graphql ^16.6.0
  • graphql-scalars ^1.21.3
  • ical-generator ^4.1.0
  • lightship ^7.1.1
  • prom-client ^14.2.0
  • sofa-api ^0.16.3
  • zod ^3.21.4
  • @graphql-codegen/add ^4.0.1
  • @graphql-codegen/cli ^3.3.1
  • @graphql-codegen/typescript ^3.0.4
  • @graphql-codegen/typescript-resolvers ^3.2.1
  • @types/express ^4.17.17
  • @types/seedrandom ^3.0.5
  • date-fns ^2.30.0
  • prisma ^4.13.0
  • seedrandom ^3.0.5
nvm
.nvmrc
  • node 18

  • Check this box to trigger a request for Renovate to run again on this repository

Allow tag filtering in CLI list command

The zeitraum ls command currently lists all time spans.

It would be nice to allow something like zeitraum ls work meeting that returns only time spans that are assigned to at least work and meeting. If they are also assigned to a third daily it should still return.

The backend allows filtering by tags already: https://github.com/KennethWussmann/zeitraum/blob/main/packages/server/src/api/graphql/schema.graphql#L30

To be verified if this needs adjustment to include the at least logic.

Create iCal events for running time spans

Currently, running time spans without an end are not exported in iCal, but it would be better if they were so that one at least knows that something is tracking.
It could be written in the title that the time span is still active.

Version Awareness

Every client should know it's version.

CLI

zeitraum version and zeitraum -v should return it's currently used version and the version of the server it's connected to.

@zeitraum/client

Should have a constant that is built into the released package with it's version.

Server

The server knows it's version already and also provides it via a query to clients, but it should also expose a query with all latest versions of the client & the CLI.


This will be useful for update and compatibility checks.

Prune unused tags from db

If you misspelled a tag, it will be forever in the DB.
Instead, they could be pruned on update & delete of time spans so they get deleted when they are no longer assigned anywhere.
Another option could be to offer update and delete operations for tags, but it sounds tedious to implement in clients for occasional use.

Offer GraphQL Subscription for time spans

For a potential client, it could be helpful to know about the time spans in real time because time can be tracked by multiple clients.
Add a subscription for the timeSpans query.

Frontend PWA

I didn't want to, but a frontend would be more comfortable than iOS Shortcuts.
The Shortcuts can't be edited easily; keeping them up-to-date is a mess.

  • PWA (online-first, for now)
  • Mobile-first
  • Keyboard navigation (ease of use like the Raycast Extension)
  • Time Spans
    • Create
    • Create from Preset
    • Update
    • Delete
    • List
  • Presets
    • Create
    • Update
    • Delete
    • List

Elgato Stream Deck Plugin

I'd like to start and stop specific tag combinations via Stream Deck for quick tracking while working.
But maybe not be worth it because the CLI or HTTP API should be sufficient. Could still offer a better UX.

iCal Export

It would be nice to have an iCal export. This way, one can easily have an overview of what they spent time on that day.

Add footer with total duration to CLI list command

The go table lib used for the list command can have a footer.
Write the sum of all durations of the list into the footer as total duration.

This way one could do queries like zeitraum ls work --today to know how much they worked today. This specific example requires #43, but in general is independent.

Change the default list command response

Currently the CLI returns all the time spans (up to 1000) when using zeitraum ls. Would be good to switch the default behaviour and only return the time spans of today, like the --today flag already does. Then add a --all & -a flag that returns all time spans like before.

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.