Skip to content


Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Welcome to Linetime, the time-aware todo list

linetime screenshot


        Notes: {
                [id] : {
                        chunks: [array of chunk Ids]
        Chunks: {
                [id] : {
                        editorState: [draftjs EditorState],
                        intervalContent: String,
                        intervalSeconds: Float,
        notificationsEnabled: Boolean,
        showSidebarMobile: Boolean,
        currentNote: NoteId,
        secondsRemaining: Float,
        timerState: <Playing, Paused, Stopped>,
        focus: ChunkId,



  • add a button for removing time chunks


  • add note titles
  • Notifications on iPhone broken.
  • autoplay
  • button for adding chunk at the end
  • show when a chunk was completed
  • copy note to clipboard
  • paste note from clipboard
  • add notification toggling to the document
  • undoing things
  • sound doesn’t play on Chrome
  • need to refresh the sidebar periodically so the times update
  • when focus changes after a new note was created without any contents, we should delete the new note.
  • ignore leading whitespace for timer entry


  • extract three reducers, one that handles chunks, one that handles ui, and one that handles notes
  • Offline storage
    • needs to work with editorState
  • get key back into chunks
  • abbreviate time on mobile
  • don’t show timelines when moving
  • get sidebar working on mobile
  • time of last edit at the right of the title in the sidebar
  • reorder chunks
  • center the borders maybe use css border images?
  • There is a sidebar on the left that lists all of the user’s notes
    • The notes are sorted by when they were last edited
    • The currently selected note is highlighted
    • The notes should show their first chunk’s content, clipped to the space available, as well as a preview of the rest of the contents.
    • when you click on an item in this sidebar, the state should change the selected note to be the clicked note.
  • When you press backspace at the beginning of a chunk, to edit the interval of that chunk, and the chunk gets merged up, the cursor is at the beginning of the chunk. The cursor should be at the same place.
  • The first line should be bold
  • get focus change working on up and down arrows
    • make sure focus is at the end of the editor
  • fix add chunk focus issue
  • get the default bank slate working
    • Editing the current time doesn’t work on initial load.
  • button to enable notifications
  • focus on chrome is broken for some reason you can’t return the focus back to any element The problem was this function in DisplayChunk.js:
  • componentDidUpdate(){ if(this.props.focused){
  • Parse each line and check if the first line has square brackets inside. If there are, then extract the contents of the brackets and figure out what time the text represents.
  • Create an entity for each timer
    • make sure the selection only covers the area of the timer itself
  • Start the timers when the user hits the start button
  • discover the time entities
  • add them to a list
  • go through the list, sequentially creating a timer for each item.
  • play and pause
  • notification + sound when you complete an item
  • Convert SPC handler into keybindingfn
  • Emit Backspace action if we’re at the beginning of a chunk
  • Backspace:
    • Merge chunk up
      1. Modifier.replaceText to insert the interval text into the content state And append that chunk’s blocks to the chunk above it.
      2. Find the chunk above the current one. Get its blocks.
      3. Get the blocks from the the content state returned from Modifier
      4. Combine those blocks into an array. Delete the current block
      5. Remove the chunk from the notes’s chunk array
      6. Delete it from the block object
      7. Return the new state
  • Get rendering of the basic state working:
    • Install redux
    • Set up basic state
    • create reducers
    • create actions
    • Create containers and components for each level of the hierarchy
  • Adding new chunks. When you press space at the end of an interval declaration it creates a new chunk Use handleBeforeInput to detect the space event Then we need to clear the contentState of the text before the cursor. draftRemovalDirection: ‘backward’ It should carry over the content that comes after it too.
  • Change focus to the new chunk after creation.
  • Fix space not working when you reenter a backspaced item this was happening because getText() is based off of the text at the beginning of the block itself, without accounting for newlines
  • Completed items should have a blue border on the left
  • Get the player working The player has a play button, pause button, and a countdown. The player is at the current chunk. Originally this is the first chunk. When you press play, the player starts the countdown. When the player’s countdown ends, the chunk should be marked complete, and the current chunk should be forwarded.
  • [40 minutes] deploy to google cloud How to deploy a static React site to Google Cloud Platform
    • [15 minutes] make a build of the site
      • research how to make a build
    • [15 minutes] setup bucket
      • make a bucket
      • [10 minutes] push build to the instance
    • remove plugin code in production


No description, website, or topics provided.






No releases published


No packages published